DAO ALTERAR REGISTRO
Pessoal estou tentando alterar um registro , como um UPDATE mais no DAO
mas está somente me alterando o 1º Registro da tabela
Seleciono outros registros e somente transcreeve sobre o 1º Registro
o que fazer pra alterar o Registro Correto
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
Obrigado
Abraços
Marcelo Fazan
mas está somente me alterando o 1º Registro da tabela
Seleciono outros registros e somente transcreeve sobre o 1º Registro
o que fazer pra alterar o Registro Correto
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
Obrigado
Abraços
Marcelo Fazan
Primeiro vc tem que localizar o dado... Crie o campo de código e localize por ele..
tipo assim...
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=2183
Este exemplo te ajudará em muita coisa.. dá uma olhada nele.. ok?
tipo assim...
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=2183
Este exemplo te ajudará em muita coisa.. dá uma olhada nele.. ok?
Adriano não localizei nada nesse exemplo que resolve-se pode-se ajudar
pelo menos nao consegui decifrar
encontrei hj esse Recordset
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar[Ô])
Text1.Text = rs!id
rs.Close
ou mais ou menos que consigo buscar o ultimo codigo porem tambem nao to sabendo alterar para adaptar
do Until Tabela.EOF
Text1.Text = Tabela([Ô]id[Ô])
Tabela.MoveNext
Loop
Tabela.Close
Não estou conguindo buscar o codigo 10 que alimenta Text1.Text = rs!id para fazer o UPDATE
grava sempre no 1º Registro da Tabela
Obrigado
Abs
Marcelo Fazan
pelo menos nao consegui decifrar
encontrei hj esse Recordset
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar[Ô])
Text1.Text = rs!id
rs.Close
ou mais ou menos que consigo buscar o ultimo codigo porem tambem nao to sabendo alterar para adaptar
do Until Tabela.EOF
Text1.Text = Tabela([Ô]id[Ô])
Tabela.MoveNext
Loop
Tabela.Close
Não estou conguindo buscar o codigo 10 que alimenta Text1.Text = rs!id para fazer o UPDATE
grava sempre no 1º Registro da Tabela
Obrigado
Abs
Marcelo Fazan
Deixa te explicar como faço...
Eu crio meus dados, todos com um código para localizá-lo...
Ae exibo todos os registros em um DBGrid... e quando quero selecionar para editar ou excluir... mando o número do código para um formulário...
tipo assim... frmcliente.txtcod.text = dbgrid1.colum(0)
ae.. no formulário cliente.. eu tenho o campo código.. e no evento change dele eu coloco um codigo para localizar todos os outros dados e exibi-los no mesmo form..
o código que uso é esse:
*************************************************************************
CÓDIGO PARA UM MÓDULO PRINCIPAL.BAS
*************************************************************************
Option Explicit
Public DirDB As String
Public DB As Database
Public EN As Recordset [ô]Endereço
Public Function AbreBD()
[ô]Localiza e Acessa o banco de dados
DirDB = (App.Path & [Ô]\BancodeDados.mdb[Ô])
Set DB = OpenDatabase(DirDB, False, False, [Ô]MS Access;PWD =suasenhaseexistir[Ô])
End Function
**********************************************************************************************************
CÓDIGO DO FORMULÃRIO...
**********************************************************************************************************
Private Sub Form_Load()
AbreBD
Set EN = DB.OpenRecordset([Ô]Select * FROM Endereco[Ô])
Set Data1.Recordset = EN
Data1.Refresh
End Sub
Private Sub txtCod_Change()
[ô]Para localizar o código... independente de sua posição.
Set EN = DB.OpenRecordset([Ô]SELECT * FROM Endereco where Codigo like [ô][Ô] & txtCod.Text & [Ô]*[ô] order by Codigo[Ô])
Set Data1.Recordset = EN
Data1.Refresh
End Sub
Depois de fazer o campo de busca... não se esqueça de escrever o código mostrando onde irá carregar cada dado do seu cliente, senao o programa irá localizar apenas o codigo e nao irá mostrar os outros dados..
tipo assim
txtNome.text = EN!Nome
Espero ter esclarecido
Eu crio meus dados, todos com um código para localizá-lo...
Ae exibo todos os registros em um DBGrid... e quando quero selecionar para editar ou excluir... mando o número do código para um formulário...
tipo assim... frmcliente.txtcod.text = dbgrid1.colum(0)
ae.. no formulário cliente.. eu tenho o campo código.. e no evento change dele eu coloco um codigo para localizar todos os outros dados e exibi-los no mesmo form..
o código que uso é esse:
*************************************************************************
CÓDIGO PARA UM MÓDULO PRINCIPAL.BAS
*************************************************************************
Option Explicit
Public DirDB As String
Public DB As Database
Public EN As Recordset [ô]Endereço
Public Function AbreBD()
[ô]Localiza e Acessa o banco de dados
DirDB = (App.Path & [Ô]\BancodeDados.mdb[Ô])
Set DB = OpenDatabase(DirDB, False, False, [Ô]MS Access;PWD =suasenhaseexistir[Ô])
End Function
**********************************************************************************************************
CÓDIGO DO FORMULÃRIO...
**********************************************************************************************************
Private Sub Form_Load()
AbreBD
Set EN = DB.OpenRecordset([Ô]Select * FROM Endereco[Ô])
Set Data1.Recordset = EN
Data1.Refresh
End Sub
Private Sub txtCod_Change()
[ô]Para localizar o código... independente de sua posição.
Set EN = DB.OpenRecordset([Ô]SELECT * FROM Endereco where Codigo like [ô][Ô] & txtCod.Text & [Ô]*[ô] order by Codigo[Ô])
Set Data1.Recordset = EN
Data1.Refresh
End Sub
Depois de fazer o campo de busca... não se esqueça de escrever o código mostrando onde irá carregar cada dado do seu cliente, senao o programa irá localizar apenas o codigo e nao irá mostrar os outros dados..
tipo assim
txtNome.text = EN!Nome
Espero ter esclarecido
Option Explicit
Global cn As ADODB.Connection
Global rs As ADODB.Recordset
[ô]Conexão:
Private Sub Main()
Dim strArquivo As String
Dim strLocal As String
Dim ConectaAccess As String
Load frmAgenda
frmAgenda.Show
DoEvents
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
strArquivo = [Ô]agenda.mdb[Ô]
strLocal = App.Path
Set cn = CreateObject([Ô]ADODB.Connection[Ô])
ConectaAccess = [Ô]Driver={Microsoft Access Driver (*.mdb)};[Ô] & _
[Ô]Dbq=[Ô] & strArquivo & [Ô];[Ô] & _
[Ô]DefaultDir=[Ô] & strLocal & [Ô];[Ô] & _
[Ô]Uid=Admin;Pwd=;[Ô]
cn.Open ConectaAccess
listar
End Sub
[ô]Rotina de Inclusão:
Public Function Inserir(ByVal strNome As String, _
strEnd As String, _
strFone As String) As Variant
cn.Execute ([Ô]insert into pessoal(nome,end,fone)[Ô] _
& [Ô]values([ô][Ô] & strNome & [Ô][ô],[ô][Ô] & strEnd & [Ô][ô],[ô][Ô] & strFone & [Ô][ô])[Ô])
Inserir = True
End Function
[ô]Rotina de Alteração:
Public Function Alterar(ByVal intCodigo As Integer, _
strNome As String, _
strEnd As String, _
strFone As String) As Variant
cn.Execute [Ô]update pessoal set nome= [ô][Ô] & strNome & [Ô][ô],[Ô] _
& [Ô] end= [ô][Ô] & strEnd & [Ô][ô], fone= [ô][Ô] & strFone & [Ô][ô][Ô] _
& [Ô] where codigo = [Ô] & intCodigo
Alterar = True
End Function
[ô]Rotina de Consulta:
Public Function Consultar(ByVal intCodigo As Integer) As Variant
Set rs = CreateObject([Ô]ADODB.Recordset[Ô])
With rs
.Open [Ô]select * from pessoal where codigo=[Ô] & intCodigo & [Ô][Ô], cn, adOpenKeyset, adLockOptimistic
If .RecordCount = 0 Then
MsgBox [Ô]Código Inválido[Ô], vbExclamation, [Ô]Erro[Ô]
Else
frmAgenda.lblcod = !codigo
frmAgenda.txtnome = IIf(IsNull(!nome), Empty, !nome)
frmAgenda.txtend = IIf(IsNull(!End), Empty, !End)
frmAgenda.txtfone = IIf(IsNull(!fone), Empty, !fone)
End If
.Close
End With
End Function
[ô]Rotina de Exclusão:
Public Function Excluir(ByVal intCodigo As Integer) As Variant
cn.Execute [Ô]delete * from pessoal where codigo=[Ô] & intCodigo & [Ô][Ô]
Excluir = True
End Function
[ô]Rotina de preenche lista
Public Function listar()
Set rs = New ADODB.Recordset
rs.Open [Ô]pessoal[Ô], cn, adOpenDynamic, adLockOptimistic, adCmdTable
Do While Not rs.EOF
With rs
frmAgenda.List1.AddItem !codigo
End With
rs.MoveNext
Loop
rs.Close
End Function
Gerarda o formulario já tenho pronto e nao tem como fazer a consulta por ADODB
Adriano tentei adaptar o que me passo, mais nao uso senha , ai nao vo saber
Set DB = OpenDatabase(DirDB, False, False, [Ô]MS Access;PWD =suasenhaseexistir[Ô])
Ou mesmo , da Erro nessa linha AbreDB
tambem nao estou usando procedure chance
entao até nesse ponto tenho os dados do cliente na tela , e ja o novo template na tela,
só que quando vo salvar essa alteracao
mesmo estando codigo 2 na tela e a nova template substituindo a anterior
eu aperto o botao Alterar DB aonde faço esse codigo
Nao populei ainda , a conexao , mais pretendo ,
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar where id like [ô][Ô] & Text1.Text & [Ô][ô] order by id[Ô])
Text1.Text = rs!id
rs.Close
ssql = [Ô]buscar[Ô]
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
dentro desse codigo acima tenho no TEXT o Codigo 2 ....... mais qdo a Alteracao Salva ele Salva no Codigo 1
Resumindo nao estou conseguindo buscar
Adriano tentei adaptar o que me passo, mais nao uso senha , ai nao vo saber
Set DB = OpenDatabase(DirDB, False, False, [Ô]MS Access;PWD =suasenhaseexistir[Ô])
Ou mesmo , da Erro nessa linha AbreDB
tambem nao estou usando procedure chance
entao até nesse ponto tenho os dados do cliente na tela , e ja o novo template na tela,
só que quando vo salvar essa alteracao
mesmo estando codigo 2 na tela e a nova template substituindo a anterior
eu aperto o botao Alterar DB aonde faço esse codigo
Nao populei ainda , a conexao , mais pretendo ,
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar where id like [ô][Ô] & Text1.Text & [Ô][ô] order by id[Ô])
Text1.Text = rs!id
rs.Close
ssql = [Ô]buscar[Ô]
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
dentro desse codigo acima tenho no TEXT o Codigo 2 ....... mais qdo a Alteracao Salva ele Salva no Codigo 1
Resumindo nao estou conseguindo buscar
Marcelo, o seu problema é conceitual.
Você precisa especificar o que vc está alterando.
Não adianda me dizer que a informação está na tela, pois isso só funciona se vc estiver percorrendo um recordset.
Veja bem:
Se vc abrir um recordset sem uma clausula [Ô]Where[Ô], isso significa que vc abriu a tabela inteira e logo o recordset irá posicionar no primeiro registro (que é o que vc está fazendo). Por isso vc tem que especificar o que vc está alterando.
Se vc abrir um recordset e usar os métodos de navegação de registros (movefirst, movenext, moveprevious, movelast), aà sim vc pode editar o registro que estiver mostrando na tela, porém vc tem que usar o mesmo recordset que vc estiver usando para navegar pelos registros.
Beleza?
Você precisa especificar o que vc está alterando.
Não adianda me dizer que a informação está na tela, pois isso só funciona se vc estiver percorrendo um recordset.
Veja bem:
Se vc abrir um recordset sem uma clausula [Ô]Where[Ô], isso significa que vc abriu a tabela inteira e logo o recordset irá posicionar no primeiro registro (que é o que vc está fazendo). Por isso vc tem que especificar o que vc está alterando.
Se vc abrir um recordset e usar os métodos de navegação de registros (movefirst, movenext, moveprevious, movelast), aà sim vc pode editar o registro que estiver mostrando na tela, porém vc tem que usar o mesmo recordset que vc estiver usando para navegar pelos registros.
Beleza?
Ola Marcos Desculpe pelo meo humilde conhecimento
sua explicacao foi boa, já consegui mover , só que agora nao estou sabendo extamente achar o registro atual preciso por no while ?
ou mudar o movenext
ssql = [Ô]buscar[Ô]
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar where id like [ô][Ô] & Text1.Text & [Ô][ô] order by id[Ô])
Text1.Text = rs!id
Tabela.MoveNext
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
rs.Close
sua explicacao foi boa, já consegui mover , só que agora nao estou sabendo extamente achar o registro atual preciso por no while ?
ou mudar o movenext
ssql = [Ô]buscar[Ô]
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar where id like [ô][Ô] & Text1.Text & [Ô][ô] order by id[Ô])
Text1.Text = rs!id
Tabela.MoveNext
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
rs.Close
au to achano seu codigo meio confuso
vc poderia me esclarecer
vc abre esta tabela para pegar o id ?
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar where id like [ô][Ô] & Text1.Text & [Ô][ô] order by id[Ô])
Text1.Text = rs!id
rs.Close
Set rs = Nothing
Set area = Nothing
Set banco = Nothing
e mostrar no text 1
depois ce abre outra tabela
Set area = DBEngine.CreateWorkspace([Ô]NewWorkspace[Ô], [Ô]Admin[Ô], [Ô][Ô])
Set banco = area.OpenDatabase(App.Path & [Ô]\busca1.mdb[Ô])
ssql = [Ô]buscar[Ô]
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
para gravar o que esta no text3 no campo template ?
esta segunda tabela tambem tem o campo id ?
que é sql = [Ô]buscar[Ô] ?
vc poderia me esclarecer
vc abre esta tabela para pegar o id ?
Dim rs As DAO.Recordset
Set rs = banco.OpenRecordset([Ô]Select * From buscar where id like [ô][Ô] & Text1.Text & [Ô][ô] order by id[Ô])
Text1.Text = rs!id
rs.Close
Set rs = Nothing
Set area = Nothing
Set banco = Nothing
e mostrar no text 1
depois ce abre outra tabela
Set area = DBEngine.CreateWorkspace([Ô]NewWorkspace[Ô], [Ô]Admin[Ô], [Ô][Ô])
Set banco = area.OpenDatabase(App.Path & [Ô]\busca1.mdb[Ô])
ssql = [Ô]buscar[Ô]
Set Tabela = banco.OpenRecordset(ssql, dbOpenDynaset)
Tabela.Edit
Tabela([Ô]template[Ô]) = Text3.Text
Tabela.Update
Tabela.Close
para gravar o que esta no text3 no campo template ?
esta segunda tabela tambem tem o campo id ?
que é sql = [Ô]buscar[Ô] ?
Buscar é o nome da Tabela a qual quero buscar o ID
simplesmente quero fazer isso
sql = [Ô]UPDATE Buscar SET[Ô]
sql = sql & [Ô] template=[ô][Ô] & text3.Text & [Ô][ô][Ô]
sql = sql & [Ô] WHERE id= [Ô] & text1.Text
só que tem que ser em DAO
simplesmente quero fazer isso
sql = [Ô]UPDATE Buscar SET[Ô]
sql = sql & [Ô] template=[ô][Ô] & text3.Text & [Ô][ô][Ô]
sql = sql & [Ô] WHERE id= [Ô] & text1.Text
só que tem que ser em DAO
hahaha
ja tinha uma ideia que eu estava trocando somente informacao na tabela ,
esta resolvido
Dim sql As String
sql = [Ô]UPDATE Buscar SET[Ô]
sql = sql & [Ô] template=[ô][Ô] & Text3.Text & [Ô][ô][Ô]
sql = sql & [Ô] WHERE id= [Ô] & Text1.Text
cn.Execute sql
Obrigado Pessoal
ja tinha uma ideia que eu estava trocando somente informacao na tabela ,
esta resolvido
Dim sql As String
sql = [Ô]UPDATE Buscar SET[Ô]
sql = sql & [Ô] template=[ô][Ô] & Text3.Text & [Ô][ô][Ô]
sql = sql & [Ô] WHERE id= [Ô] & Text1.Text
cn.Execute sql
Obrigado Pessoal
Tópico encerrado , respostas não são mais permitidas