[firebase-br] Erro sinistro !
Eduardo Bahiense
eduardo em icontroller.com.br
Qui Jan 10 22:45:14 -03 2008
Olá Anderson
Isto não é problema do FB, mas do(s) componente(s) que vc está usando.
Já acompanhei um erro como esse na lista da Borland, então vou arriscar
que seu caso seja semelhante.
Faz tempo que não trabalho com Delphi, então não leve as coisas ao pé da
letra.
Se você estiver usando CDS+Provider, há uma propriedade no provider que
se refere ao modo de atualização (updatemode, se não me engano). Esta
propriedade, normalmente, vem com default Allfields (ou algo
semelhante). O melhor é que ela seja KeyOnly, pelo seguinte:
Quando está All e você edita um registro, ele vai montar um update do tipo:
UPDATE TABELA SET CAMPO = VALOREDITADO WHERE
CAMPO1=X AND CAMPO2=Y AND CAMPO3=Z AND CAMPON=...
O problema é que se algum dos seus campos for TIMESTAMP, pode haver
diferença de milisegundos pelo tratamento do componente de acesso. Se
não me engano, isto também pode acontecer em campos FLOAT. A
conseqüência é que como a instrução de update se refere a todos os
campos, se um deles não for com o valor exato, vai furar a condição do
WHERE e o número de registros afetados pela instrução retorna ZERO. O
seu componente de acesso, por sua vez, interpreta isso como "Registro
não existente ou modificado por outro usuário".
A solução então é trocar a propriedade para KeyOnly, ou seja, o UPDATE
será montado considerando somente a chave primária da tabela. Algo assim:
UPDATE TABELA SET CAMPO = VALOREDITADO WHERE CAMPOPK=X
Naturalmente, no mesmo componente de acesso, ou no provider, ou no CDS,
não lembro bem, você terá que indicar quais campos compõem a chave
primária da tabela em questão.
Espero ter conseguido me fazer entender e ter ajudado.
Talvez algum colega mais ativo nesse assunto possa ajudar melhor,
principalmente se você nos disser mais sobre o seu ambiente de
senvolvimento - Linguagem, Sistema Operacional e Componente de acesso
utilizado.
Abs,
Eduardo
Anderson escreveu:
> Pessoal tenho uma tabela com uns 100 itens
>
> o detalhe é que se tento alterar os primeiros registros ele altera na boa.
>
> mas se tento alterar os ultimos ele da:
>
> "record not found or changed by another user firebird" e depois "record not
> find"
>
> Ja restaurei backup, recriei indice, apaguei o codigo 83 por exemplo, e
> coloquei de novo !!!!
>
> e mesmo assim ainda da o erro !
>
> Uso fire 2.0 delphi 7 e Dbexpress
>
> Abracos
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista