[firebase-br] Trigger + ClientDataSet

Francisco Thiago Almeida jeandeadlucky em yahoo.com.br
Sex Dez 3 13:59:15 -03 2004


Então tá, vamos descobrir onde está o erro:
 
Crie uma nova tabela e um novo Form, e faça o acesso a essa nova tabela, não escrevendo código algum.
 
Escreva a Trigger conforme eu te instrui a pouco (e o generato também);
 
...
 
 if (new.campo is null) or (new.campo = -1) then
  new.campo = gen_id(gernerator,1)
 
...
 
Configure os componentes como de praxe. Neste caso, não será necessário setar o required para false...
 
no before post do ClientDataSet escreva:
 
If DataSet.FindField('Campo') <> Nil Then
  DataSet.FieldByName('Campo').AsInteger := -1
 
onde "Campo" é o campo "auto incremento"
 
coloque os campos no form... tudo como de praxe... adicione o dbnavigator e um outro componente button.
Neste componente Button, escreva o seguinte código:
 
ClientDataSet1.ApplyUpdates(0);
 
E no evento OnReconcileError do ClientDataSet escreva o seguinte:
 
ShowMessage(E.Message) // este código é para você ver a mensagem de erro)
 
execute a aplicação e faça os testes. Se você fizer exclusivamente desta forma, deve funcionar corretamente.
 
Espero que tenha ajudado
 
Thiago

Leonardo <leomarcsys em mcnet.inf.br> wrote:
Mas como faço para conferir isto, pois segui os passos constantes de 
alguns livros delphi que possuo, e como é a primeira vez que utilizo a 
estrutura SQLDataSet+DSP+CDS então estou bem perdido.

Antes eu usava o GENERATOR com uma StoredProcedure e criava um 
componente IBStoredProcedure que era acionado no BeforeInsert do 
componente Tabela!

Marcilio Soares wrote:

>Nao seria problema de cache de dados no cliente que ta gerando o erro ?
>No banco pelo que vcs tao falando... ele atualiza ok e da pra conferir isso.
>Nao seria o dataset do client que taria gerando erro, pois pode esta com o
>row de dados velho em relacao ao banco de dados apos o applyupdates?
>
>----- Original Message ----- 
>From: "Leonardo" 
>To: "FireBase" 

>Sent: Friday, December 03, 2004 10:48 AM
>Subject: Re: [firebase-br] Trigger + ClientDataSet
>
>
>Pelo que pude notar o erro está acontecendo é devido a TRIGGER não está
>atualizando o campo DESTINATARIO_ID, pois quando dou o
>POST/APPLYYPDATES na primeira vez que ativo o ClientDataSet ele insere o
>registro normalmente, mas quando vou inserir um segundo ao enviar o
>POST/APPLYUPDATES eu recebo um erro de VIOLATION KEY, parece que a
>TRIGGER não fornece uma nova ID para a inserção do segundo registro e
>sim repete a ID fornecida ao primeiro!!!
>
>
>Francisco Thiago Almeida wrote:
>
> 
>
>>Não passe -1 no applyupdates.. Pode ser que os erros estejam acontecendo
>> 
>>
>sim.. mas a aplicaçao não os está devolvendo pra você.
> 
>
>>Depois de ler o script da trigger, eu creio que esteja acontecendo o
>> 
>>
>seguinte:
> 
>
>>Voce está passando um valor padrão para o campo Destinatario (seja null,
>> 
>>
>zero, ou -1).. na primeira vez que você incluir, tudo bem. mas na segunda dá
>erro de chave e como o applyupdates está com -1, ele não retorna erro..
> 
>
>>Leia o outro email que mandei e vê se resolve....
>>
>>Espero estar ajudando
>>
>>Thiago
>>
>>
>>
>>
>> 
>>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>Para editar sua configuração na lista, use o endereço
>http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
> 
>


______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br


-----------------------------------------------
Francisco Thiago de Almeida         
MRL Consultoria em Informática    
Divisão Desenvolvimento e Banco de Dados
Franca/SP
__________________________________________________
Converse com seus amigos em tempo real com o Yahoo! Messenger 
http://br.download.yahoo.com/messenger/ 


Mais detalhes sobre a lista de discussão lista