[firebase-br] Erro sinistro !

Anderson infosag em terra.com.br
Sex Jan 11 00:01:59 -03 2008


amigo show de explicacao !!!!

ate exclui os componentes e os coloquei de volta com essas configuracoess !

mas o problema ainda persiste !! consigo alterar o 1 registro e salva 
tranquilo !

mas se tento qq um dos ultimos ele da o erro !!!!

se altero pelo IBexpert ele altera os registros em questao !

e agora ?


----- Original Message ----- 
From: "Eduardo Bahiense" <eduardo em icontroller.com.br>
To: <lista em firebase.com.br>
Sent: Thursday, January 10, 2008 9:45 PM
Subject: Re: [firebase-br] Erro sinistro !


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
>


______________________________________________
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