dbExpress Firebird Delphi 7
Amigos, bom dia!!!
Estou migrando minha aplicação que hj é em IBX pra dbExpress.
Comecei com um cadastro de Uf´s(ID_UF, UF), usando os componentes conforme manda a regra:
SqlConnection + SqlDataSet + DataSetProvider + ClientDataSet
Mudei os providerflags, sendo o TField ID_UF [pfInkey] e o TField UF [pfInUpdate]. Alterei tb o required field p/ False.
No meu BD tenho uma trigger pra autonumerar o campo ID_UF, até ai tudo ok.
Abro a tela, cadastro um registro, tudo ok. Em seguinda vou cadastrar o segundo e dá o seguinte erro : ´Key Violation´. Isso ocorre sempre.
O q será que estou fazendo de errado? Já tentei desativar a trigger e colocar o valor na mão pra ver, mas o erro persiste...
Qq ajuda é bem vinda!
Marcelo
[/img]
Estou migrando minha aplicação que hj é em IBX pra dbExpress.
Comecei com um cadastro de Uf´s(ID_UF, UF), usando os componentes conforme manda a regra:
SqlConnection + SqlDataSet + DataSetProvider + ClientDataSet
Mudei os providerflags, sendo o TField ID_UF [pfInkey] e o TField UF [pfInUpdate]. Alterei tb o required field p/ False.
No meu BD tenho uma trigger pra autonumerar o campo ID_UF, até ai tudo ok.
Abro a tela, cadastro um registro, tudo ok. Em seguinda vou cadastrar o segundo e dá o seguinte erro : ´Key Violation´. Isso ocorre sempre.
O q será que estou fazendo de errado? Já tentei desativar a trigger e colocar o valor na mão pra ver, mas o erro persiste...
Qq ajuda é bem vinda!
Marcelo
[/img]
Mvicente
Curtidas 0
Respostas
Andreaskaquino
23/06/2006
Após gravar o primeiro registro verifica qual o valor que gerou no campo ID, derepente ele esta gerando um código 0(zero) e ao inserir um novo registro ocorre a violação de chave primária.
Att,
Att,
GOSTEI 0
Paullsoftware
23/06/2006
É que vc deve dar um Comit na transação em questão ou dar um refresh no seu CDS, pois, o mesmo guarda as informações em Cache local... exemplo básico de como eu faço hoje:
para maiores informações sobre transações com DbExpress tem dois links abaixo que são muito uteis...
http://forum.clubedelphi.net/viewtopic.php?t=75421&highlight=dbexpress+iniciante
http://forum.clubedelphi.net/viewtopic.php?t=58547
espero ter ajudado :wink:
var TranDesc : TTransactionDesc; // declare DbXpress na uses begin Try Transacao.TransactionID := 1; Transacao.IsolationLevel := xilREADCOMMITTED; Conn.StartTransaction(Transacao); CdsClientes.Post; CdsCliente.ApplyUpdates(0); Conn.Commit(TranDesc); Except Conn.RollBack(TranDesc); end;
para maiores informações sobre transações com DbExpress tem dois links abaixo que são muito uteis...
http://forum.clubedelphi.net/viewtopic.php?t=75421&highlight=dbexpress+iniciante
http://forum.clubedelphi.net/viewtopic.php?t=58547
espero ter ajudado :wink:
GOSTEI 0
Mvicente
23/06/2006
Amigos consegui, conforme a dica do companheiro Paulo Ricardo eu apenas estou dando um refresh no ClientDataSet no evento AfterApplyUpadades.
Valeu pela dica...
Sucesso a todos!!!
Valeu pela dica...
Sucesso a todos!!!
GOSTEI 0