BUG COM ACCESS
Tópicos com [Ô]Bug em Access[Ô] devem existir aos milhares. Mas estou me debatendo com um problema a mais de 2 dias, e estou quase desistindo. Estou usando um banco de dados Access. Até migrei para a versão 2010 (.accdb), importei as tabelas, mas o maldito bug persiste.
Acontece o seguinte: tenho uma tabela, cujo código não está em auto-numeração (e precisa ser assim). Quando vou salvar um registro, verifico qual o último código cadastrado e adiciono +1. O código base é o seguinte:
O problema: supondo que meu último registro seja o de número 22 (!Codigo=22), IDSave seriÃa igual a 23. Acontece que (!Codigo + 1), sendo !Codigo=22, da 22, e não 23. Já deletei os registros da tabela. Começo a recadastrar, e, em determinado momento, o maldito erro. Obs.: não da o erro sempre no mesmo registro. Pode ser no quarto, décimo, etc.
Isso aconteceu uma vez, a uns 2 anos atrás. Mas bastou eu reparar a base de dados. Desta vez, nem a pau.
Alguém já vivenciou esta situação?
Acontece o seguinte: tenho uma tabela, cujo código não está em auto-numeração (e precisa ser assim). Quando vou salvar um registro, verifico qual o último código cadastrado e adiciono +1. O código base é o seguinte:
tblDados.Open Tabela, Conn, adOpenStatic, adLockOptimistic
If Not .EOF Then
.MoveLast
IDSave = (!Codigo + 1)
Else
IDSave = 1
End If
.AddNew
O problema: supondo que meu último registro seja o de número 22 (!Codigo=22), IDSave seriÃa igual a 23. Acontece que (!Codigo + 1), sendo !Codigo=22, da 22, e não 23. Já deletei os registros da tabela. Começo a recadastrar, e, em determinado momento, o maldito erro. Obs.: não da o erro sempre no mesmo registro. Pode ser no quarto, décimo, etc.
Isso aconteceu uma vez, a uns 2 anos atrás. Mas bastou eu reparar a base de dados. Desta vez, nem a pau.
Alguém já vivenciou esta situação?
o campo no acces esta como numerico?
tente sql=[Ô]select id from tabela order by desc[Ô]
id= rs.id +1
tente sql=[Ô]select id from tabela order by desc[Ô]
id= rs.id +1
Quando você move par ao fim .movelast, será que ele não vai para uma linha em branco?
verifique o valor do campo código do último registro
da um msgbox !codigo pra verificar se o campo código tem algum valor
tblDados.Open Tabela, Conn, adOpenStatic, adLockOptimistic
If Not .EOF Then
.MoveLast
msgbox !codigo
IDSave = (!Codigo + 1)
Else
IDSave = 1
End If
.AddNew
verifique o valor do campo código do último registro
da um msgbox !codigo pra verificar se o campo código tem algum valor
tblDados.Open Tabela, Conn, adOpenStatic, adLockOptimistic
If Not .EOF Then
.MoveLast
msgbox !codigo
IDSave = (!Codigo + 1)
Else
IDSave = 1
End If
.AddNew
Boa tarde,
Amigo acredito que o seu problema esteja no tipo de variavel usado, seu campo no bd deve ser texto e tal soma o vb não aceita, acredito que se você usar a Função cdbl(nomedorecordset!nomedocampo) irá ocorrer bem.
Espero poder ter ajudado.
TODAY IS BEER DAY
Amigo acredito que o seu problema esteja no tipo de variavel usado, seu campo no bd deve ser texto e tal soma o vb não aceita, acredito que se você usar a Função cdbl(nomedorecordset!nomedocampo) irá ocorrer bem.
Espero poder ter ajudado.
TODAY IS BEER DAY
é um bug do Access mesmo. Exportei a tabela para uma base MySQL e rodei o programa, acessando o banco com ADO (MySQL ODBC 5.1 Driver) e rodou perfeitamente.
mas o campo no access está como numerico?
Aparentemente, o problema não parece ser do access...
Já tentou armazenar o valor na variável e depois somar?
O seu código para pegar a sequencia não é muito usual... eu prefiro usar uma tabela de sequencias ou auto-numeração.
Já tentou armazenar o valor na variável e depois somar?
O seu código para pegar a sequencia não é muito usual... eu prefiro usar uma tabela de sequencias ou auto-numeração.
HiDDEN se no mysql funciona perfeitamente, então colega não pense duas vezes para mudar, access é bom até certo limite.
Tópico encerrado , respostas não são mais permitidas