PROBLEMA COM BD SQL
Pessoal,
Estou com um probleminha sério.
Tenho uma base de dados de clientes instalado em vários locais. Recentemente, alguns deles começaram a reclamar de registros no BD serem sobreescritos por outros. Acontece realmente, mas, não consigo identificar a origem do problema. Este é o código do botão alterar cadastro, que acredito ser a fonte de problema.
If Tipo = "INC" Then
'se for de inclusão de novo registro, passa o parà ¢metro INC para a minha função de incluir no BD, NEWPK busca a nova chave primária na tabela.
Rs_Alunos!cod_aluno = NewPK("alunos", "cod_aluno")
Append2Log (UserNow & ": Criou o aluno nº " & Rs_Alunos!cod_aluno & " - " & Rs_Alunos!nome_aluno)
ElseIf Tipo = "UPD" Then
'o parà ¢metro UPD indica que a requisição é de alteração do registro
Dim CodCorretoAluno As Integer
CodCorretoAluno = txt_codaluno.Text
'coloquei essa verificação pra tentar corrigir o problema. será que resolverá??
If Rs_Alunos!cod_aluno <> txt_codaluno.Text Then
Rs_Alunos!cod_aluno = CodCorretoAluno
Append2Log (UserNow & ": ERRO NO CADASTRO DO ALUNO nº " & Rs_Alunos!cod_aluno & " - " & Rs_Alunos!nome_aluno)
Else
Append2Log (UserNow & ": Editou o aluno nº " & Rs_Alunos!cod_aluno & " - " & Rs_Alunos!nome_aluno)
End If
End If
De inÃcio, achei que fosse o sistema multi-usuário, mas, há clientes que são mono usuário, com as mesmas configurações e acontece tbem...
Será que alguém pode me ajudar?
Att.
Estou com um probleminha sério.
Tenho uma base de dados de clientes instalado em vários locais. Recentemente, alguns deles começaram a reclamar de registros no BD serem sobreescritos por outros. Acontece realmente, mas, não consigo identificar a origem do problema. Este é o código do botão alterar cadastro, que acredito ser a fonte de problema.
If Tipo = "INC" Then
'se for de inclusão de novo registro, passa o parà ¢metro INC para a minha função de incluir no BD, NEWPK busca a nova chave primária na tabela.
Rs_Alunos!cod_aluno = NewPK("alunos", "cod_aluno")
Append2Log (UserNow & ": Criou o aluno nº " & Rs_Alunos!cod_aluno & " - " & Rs_Alunos!nome_aluno)
ElseIf Tipo = "UPD" Then
'o parà ¢metro UPD indica que a requisição é de alteração do registro
Dim CodCorretoAluno As Integer
CodCorretoAluno = txt_codaluno.Text
'coloquei essa verificação pra tentar corrigir o problema. será que resolverá??
If Rs_Alunos!cod_aluno <> txt_codaluno.Text Then
Rs_Alunos!cod_aluno = CodCorretoAluno
Append2Log (UserNow & ": ERRO NO CADASTRO DO ALUNO nº " & Rs_Alunos!cod_aluno & " - " & Rs_Alunos!nome_aluno)
Else
Append2Log (UserNow & ": Editou o aluno nº " & Rs_Alunos!cod_aluno & " - " & Rs_Alunos!nome_aluno)
End If
End If
De inÃcio, achei que fosse o sistema multi-usuário, mas, há clientes que são mono usuário, com as mesmas configurações e acontece tbem...
Será que alguém pode me ajudar?
Att.
Olha, eu , particularmente, não consegui visualizar o problema ...talvez debugando as funções..etc...mas faz o seguinte..eu matei uma uns tempos atras tb que ninguém sabia da onde vinha o mardito valor que ia pruma tabela. Já que vc usar sql server, coloca uma trigger de insert e update nesta tabela, adicona alguns campos a mais (campos que vc teria pra verfificar o problema..algo como o campo TIPO (UNC ou UPD) pra ver em que momento está sobrescrevendo..enfim os campos que vc necessitaria pra fazer uma analise. Coloque numa nova tabela com Hora, usuario..etc...Quando der o problema novamente, vai estar logado nesta nova tabela. Até mesmo vc pode ver qual usuario gerou o problema e ir até ele pra verificar qual o procedimento que ele faz pra gerar isso. Talvez em algum ponto do programa mande UPD em vez de UNC ou vice versa. Eu resolvi o problema que eu tinha assim.é uma idéia..com certeza aparecerão outras por aqui...
Eu tb daria uma boa olhada nela antes de mais nada.....
Que acha de mudar o sql ? Não sei se é este o problema, mas pelo menos vc não usaria movelast nem recordcount.
Dim Retorno as integer
Rs_Get.Open "SELECT max(" & PK & ") + 1 AS NovoValor FROM " & Tabela , Banco, adOpenStatic, adLockReadOnly .
Retorno = 1
if not rs.eof then
if not isnull(rs("novovalor")) then
retorno = Rs_Get("novovalor")
endif
endif
NewPK = retorno
Dim Retorno as integer
Rs_Get.Open "SELECT max(" & PK & ") + 1 AS NovoValor FROM " & Tabela , Banco, adOpenStatic, adLockReadOnly .
Retorno = 1
if not rs.eof then
if not isnull(rs("novovalor")) then
retorno = Rs_Get("novovalor")
endif
endif
NewPK = retorno
Neill, uma outra idéia, caso estas não resolvam o problema, na realidade é pra te ajudar a encontrar o problema e não resolvê-lo..use o profiler do sql server. Coloque em uma nova tabela Filtre pro id do banco, dentre outras , depois filtre esta nova tabela gerada pelo profiler na tabela que vc quer e vê se consegue identificar alguma coisa. O profiler te pegará select, insert e update no banco inteiro. Mas depois vc pode ir retirando as linhas que não quer..tipo pegar somente os update que foram dados na tabela.
Abraços e avisa a gente aÃ.
Abraços e avisa a gente aÃ.
Tópico encerrado , respostas não são mais permitidas