DAO ALTERAR REGISTRO

MARCELOFAZAN 07/08/2010 23:14:19
#349717
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
ADRIANOM 07/08/2010 23:42:22
#349718
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?
MARCELOFAZAN 08/08/2010 00:30:25
#349720
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
ADRIANOM 08/08/2010 01:16:01
#349721
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
GERARDA 08/08/2010 11:04:04
#349726
Resposta escolhida


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
MARCELOFAZAN 08/08/2010 12:16:31
#349728
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







MARCOSLING 08/08/2010 12:35:34
#349729
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?
MARCELOFAZAN 08/08/2010 13:18:40
#349730
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
GERARDA 08/08/2010 13:46:43
#349732
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[Ô] ?




MARCELOFAZAN 08/08/2010 13:57:22
#349733
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
MARCELOFAZAN 08/08/2010 14:28:19
#349736
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
Tópico encerrado , respostas não são mais permitidas