ATUALIZAR BANCO ACCESS 2013
Boa noite de novo, hehe..
Estou em um projeto do excel que uso VBA, porém optei por usar o access e não mysql por motivos de mobilidade, onde vai a planilha vai os dados. Porém, notei uma coisa estranha, após gravar, alterar ou excluir um registro, parece que eu tenho que fechar a conexão e abrir novamente para que atualize.
Exemplo:
Eu insiro um registro e dou o comando rs.movelast, isso faria com que fosse para o ultimo registro, e o ultimo é o que eu acabei de inserir, quando eu fecho e abro novamente o form, ele move para o ultimo, tentei dar um rs.update, mas não funciona. Qual a melhor forma será?
Obrigado desde já.
Abraços.
Estou em um projeto do excel que uso VBA, porém optei por usar o access e não mysql por motivos de mobilidade, onde vai a planilha vai os dados. Porém, notei uma coisa estranha, após gravar, alterar ou excluir um registro, parece que eu tenho que fechar a conexão e abrir novamente para que atualize.
Exemplo:
Eu insiro um registro e dou o comando rs.movelast, isso faria com que fosse para o ultimo registro, e o ultimo é o que eu acabei de inserir, quando eu fecho e abro novamente o form, ele move para o ultimo, tentei dar um rs.update, mas não funciona. Qual a melhor forma será?
Obrigado desde já.
Abraços.
Certamente após fecha-lo, sua conexão com o banco deve ter ficado ativa e o seu form ficou na memória. Tente fechar o form e sua conexão usando um Dispose. Creio que assim sua conexão será encerrada, e o form será fechado realmente.
Então, mas é que não quero fecha-lo, eu quero que ao inserir o ultimo valor, ele já ir para o que foi inserido naquela hora, e não precisar fechar e abrir o form para que seja mostrado.
Eu não sei como você está fazendo para preencher o grid, por isso fica dificil saber o que se passa. Tente atualizar o recordset após a inserção pra ver se vai. Tipo assim:
Se não for, vê se tem como dar um refresh diretamente no grid.
[ô]após salvar
rs.Refresh
rs.movelast
Se não for, vê se tem como dar um refresh diretamente no grid.
Então, eu tentei esse mas não funciona
O jeito vai ser você postar o projeto como tá.
Bom dia!
Bom, vamos lá, eu tenho um form, onde cadastro as fazendas, quando insiro uma nova, ele precisaria ir para o ultimo registro. Esse ultimo registro seria o que eu acabei de inserir, correto? Então, mas ele está entendendo que o ultimo é o ultimo que estava gravado anteriormente antes de inserir esse novo, pois quando eu dou um rs.movelast, ele não move para o que eu acabei de inserir. Foi aà que pensei que precisaria ter alguma coisa como refresh ou update para atualizar, mas não estou tendo sucesso nisso. Tentei procurar em algum lugar pra ver se encontrava alguma coisa, mas nada.
A rotina que estou usando para inserir os dados é:
Bom, vamos lá, eu tenho um form, onde cadastro as fazendas, quando insiro uma nova, ele precisaria ir para o ultimo registro. Esse ultimo registro seria o que eu acabei de inserir, correto? Então, mas ele está entendendo que o ultimo é o ultimo que estava gravado anteriormente antes de inserir esse novo, pois quando eu dou um rs.movelast, ele não move para o que eu acabei de inserir. Foi aà que pensei que precisaria ter alguma coisa como refresh ou update para atualizar, mas não estou tendo sucesso nisso. Tentei procurar em algum lugar pra ver se encontrava alguma coisa, mas nada.
A rotina que estou usando para inserir os dados é:
Conexao.Execute ([Ô]INSERT INTO tabcadfaz (nomefaz, mtcub, plantas, captanque, qtdebicos, esplinha, esppl) VALUES ([ô][Ô] & txtnomefaz.Text & [Ô][ô], [ô][Ô] & txtmtcub.Text & [Ô][ô], [ô][Ô] & txtplantas.Text & [Ô][ô], [ô][Ô] & txtcaptanque.Text & [Ô][ô], [ô][Ô] & txtbicos.Text & [Ô][ô], [ô][Ô] & txtesplinha.Text & [Ô][ô], [ô][Ô] & txtesppl.Text & [Ô][ô])[Ô])
rs.MoveLast
txtcodfaz.Text = rs!codfaz
txtnomefaz.Text = rs!nomefaz
txtmtcub.Text = rs!mtcub
txtplantas.Text = rs!plantas
txtcaptanque.Text = rs!captanque
txtbicos.Text = rs!qtdebicos
txtesplinha.Text = rs!esplinha
txtesppl.Text = rs!esppl
MsgBox [Ô]Fazenda cadastrada com sucesso![Ô], vbInformation + vbOKOnly, [Ô]Sistema diz[Ô]
Você está inserindo diretamente pelo objeto de conexão, por isso que o recordset não é atualizado. Tente substituir o codigo acima por este, creio que assim funcionará.
rs.AddNew
rs(1) = txtnomefaz.Text
rs(2) = txtmtcub.Text
rs(3) = txtplantas.Text
rs(4) = txtcaptanque.Text
rs(5) = txtcaptanque.Text
rs(6) = txtbicos.Text
rs(7) = txtesplinha.Text
rs(8) = txtesppl.Text
rs.Update
rs.MoveLast
txtcodfaz.Text = rs!codfaz
txtnomefaz.Text = rs!nomefaz
txtmtcub.Text = rs!mtcub
txtplantas.Text = rs!plantas
txtcaptanque.Text = rs!captanque
txtbicos.Text = rs!qtdebicos
txtesplinha.Text = rs!esplinha
txtesppl.Text = rs!esppl
Nesse caso aparece como eu tinha dito, ele não aceita..
Já que está usando o ACCESS, eu aconselharia você a abrir e fechar a conexão toda vez que for fazer alguma operação com o banco, assim você aumentaria as chances do seu banco não corromper. E além do mais, fazendo assim, creio que esse seu problema também seria resolvido.
[txt-color=#e80000]Conexao.Open[/txt-color] [txt-color=#007100][ô]Eu sei que você já estava abrindo o banco em outro lugar, só coloquei aqui para exemplificar[/txt-color]
Conexao.Execute ([Ô]INSERT INTO tabcadfaz (nomefaz, mtcub, plantas, captanque, qtdebicos, esplinha, esppl) VALUES ([ô][Ô] & txtnomefaz.Text & [Ô][ô], [ô][Ô] & txtmtcub.Text & [Ô][ô], [ô][Ô] & txtplantas.Text & [Ô][ô], [ô][Ô] & txtcaptanque.Text & [Ô][ô], [ô][Ô] & txtbicos.Text & [Ô][ô], [ô][Ô] & txtesplinha.Text & [Ô][ô], [ô][Ô] & txtesppl.Text & [Ô][ô])[Ô])
[txt-color=#e80000]Conexao.Close[/txt-color]
[txt-color=#e80000]Conexao.Open[/txt-color]
rs.MoveLast
txtcodfaz.Text = rs!codfaz
txtnomefaz.Text = rs!nomefaz
txtmtcub.Text = rs!mtcub
txtplantas.Text = rs!plantas
txtcaptanque.Text = rs!captanque
txtbicos.Text = rs!qtdebicos
txtesplinha.Text = rs!esplinha
txtesppl.Text = rs!esppl
[txt-color=#e80000]Conexao.Close[/txt-color]
MsgBox [Ô]Fazenda cadastrada com sucesso![Ô], vbInformation + vbOKOnly, [Ô]Sistema diz[Ô]
Então, eu até tinha tentado dessa maneira, mas , ele diz que a operação não é permitida quando o objeto está fechado, mas eu fui no debug e ele passa pelo open e abre, estranho. O erro se da na linha
rs.MoveLast
Conecta True
Conexao.Execute ([Ô]INSERT INTO tabcadfaz (nomefaz, mtcub, plantas, captanque, qtdebicos, esplinha, esppl) VALUES ([ô][Ô] & txtnomefaz.Text & [Ô][ô], [ô][Ô] & txtmtcub.Text & [Ô][ô], [ô][Ô] & txtplantas.Text & [Ô][ô], [ô][Ô] & txtcaptanque.Text & [Ô][ô], [ô][Ô] & txtbicos.Text & [Ô][ô], [ô][Ô] & txtesplinha.Text & [Ô][ô], [ô][Ô] & txtesppl.Text & [Ô][ô])[Ô])
Conecta False
Conecta True
rs.MoveLast
txtcodfaz.Text = rs!codfaz
txtnomefaz.Text = rs!nomefaz
txtmtcub.Text = rs!mtcub
txtplantas.Text = rs!plantas
txtcaptanque.Text = rs!captanque
txtbicos.Text = rs!qtdebicos
txtesplinha.Text = rs!esplinha
txtesppl.Text = rs!esppl
Conecta False
MsgBox [Ô]Fazenda cadastrada com sucesso![Ô], vbInformation + vbOKOnly, [Ô]Sistema diz[Ô]
Tópico encerrado , respostas não são mais permitidas