ApplyUpdates(0) do ClientDataSet
14/05/2003
0
Estou desenvolvendo um aplicativo simple com Firebird e DBExpress, ao tentar realizar o ApplyUpdates(0) do ClientDataSet de lançamentos efetuados em grid recebo a seguinte menssagem : unabled to find record. No key specifiend.
Será que alguem pode me ajudar?
Grato.
Será que alguem pode me ajudar?
Grato.
Macbertocco
Curtir tópico
+ 0
Responder
Posts
14/05/2003
Martelato
esperimente usar ApplyUpdates(-1), este erro é porque algum campo do registro vc deixo de preencher corretamente, entao o (0), quer dizer, que ñ pode ter nenhum erro, agora (-1), ele ignora o erro.
falou.
espero que tenha te ajudado
:)
br@edxmy#
falou.
espero que tenha te ajudado
:)
br@edxmy#
Responder
14/05/2003
Dbezerra
falae cumpadi!
provavelmente em algum dos seus clientdatasets o campo chave de uma tabela estah em branco, nulo...
se vc estah utilizando o esquema de mestre-detalhe, vc deve fazer o seguinte:
no OnNewRecord dos ClientDataSets atribua ao campo chave um valor q teoricamente seria invalivado para uma chava, por exemplo, -1.
No BeforeUpdateRecords do DataSetProvider o q estah ligado ao ClientDataSet mestre, verifique se estah sendo inserido algo (if UpdateKind = ukInsert then...). Depois verifique se a SQLQuery (eu suponho q seja esta) onde estah sendo inserida eh a query mestre (if SourceDS = qryPessoa, sendo q qryPessoa eh a SQLQuery mestre).
se for verdadeiro traga do banco o max() da chave + 1 e atribua ao campo de chave do parametro DeltaDS do BeforeUpdateRecords (DeltaDS.FindField(´CodPessoa´).NewValue := (Max(CodPessoa) + 1).
guarde este max()+1 de alguma forma pq, causo a query q esteja sendo inserida seja uma query de detalhe (qryCliente, por exemplo) vc deverah apenas atribuir o valor da variavel de max()+1 para o campo chave do DeltaDS, assim como vc fez ateriormente, soh q sem gerar um novo sequencial.
:D espero ter ajudado... :D
provavelmente em algum dos seus clientdatasets o campo chave de uma tabela estah em branco, nulo...
se vc estah utilizando o esquema de mestre-detalhe, vc deve fazer o seguinte:
no OnNewRecord dos ClientDataSets atribua ao campo chave um valor q teoricamente seria invalivado para uma chava, por exemplo, -1.
No BeforeUpdateRecords do DataSetProvider o q estah ligado ao ClientDataSet mestre, verifique se estah sendo inserido algo (if UpdateKind = ukInsert then...). Depois verifique se a SQLQuery (eu suponho q seja esta) onde estah sendo inserida eh a query mestre (if SourceDS = qryPessoa, sendo q qryPessoa eh a SQLQuery mestre).
se for verdadeiro traga do banco o max() da chave + 1 e atribua ao campo de chave do parametro DeltaDS do BeforeUpdateRecords (DeltaDS.FindField(´CodPessoa´).NewValue := (Max(CodPessoa) + 1).
guarde este max()+1 de alguma forma pq, causo a query q esteja sendo inserida seja uma query de detalhe (qryCliente, por exemplo) vc deverah apenas atribuir o valor da variavel de max()+1 para o campo chave do DeltaDS, assim como vc fez ateriormente, soh q sem gerar um novo sequencial.
:D espero ter ajudado... :D
Responder
Clique aqui para fazer login e interagir na Comunidade :)