 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Ter Mar 24, 2015 10:17 pm Assunto: erro no ApplyUpdates, usando FIREDAC [RESOLVIDO] |
|
|
pessoal, estou fazendo um cadastro usando FIREDAC, e uso TFDQuery, quando vou salvar em tempo de debug a aplicação retorna esse erro abaixo pra mim, porem os dados gravam normalmente no banco de dados, e não tem nenhum código repetido na tabela, esse erro ocorre somente apos inserir mais de um registro, insiro 1 ele grava normal sem erro, ai vou pro próximo ai começa dar esse erro.
Project xxxxxx.exe raised exception class EIBNativeException with message '[FireDAC][Phys][FB]violation of PRIMARY or UNIQUE KEY constraint "PK_NEW_TABLE" on table "NEW_TABLE"
Problematic key value is ("IDITESTE" = 35)'.
no botão salvar tenho o seguinte código :
QryCadastro.Post;
QryCadastro.ApplyUpdates();
alguém tem ideia do que seja ?
Editado pela última vez por adami em Qui Mar 26, 2015 8:17 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Ter Mar 24, 2015 10:25 pm Assunto: |
|
|
| a propriedade CACHEDUPDATES esta como TRUE. |
|
| Voltar ao Topo |
|
 |
mobius1qwe Aprendiz

Registrado: Quarta-Feira, 8 de Dezembro de 2010 Mensagens: 146
|
Enviada: Qua Mar 25, 2015 2:24 pm Assunto: |
|
|
Chave primária duplicada.
Se estiver editando algum campo, defina o DataSet para EDIT e não utilize o POST, só APPLYUPDATES.
Se estiver inserindo registro novo, defina o DataSet para INSERT e utilize o POST pra inserir, depois de todas as inserções use o APPLYUPDATES pra economizar chamada de função.
Se esse erro ocorrer ao inserir algum registro, verifique quem informa o valor de chave primária pra ser gravado no banco porque a lógica tá errada. |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qua Mar 25, 2015 5:20 pm Assunto: |
|
|
| mobius1qwe escreveu: | Chave primária duplicada.
Se estiver editando algum campo, defina o DataSet para EDIT e não utilize o POST, só APPLYUPDATES.
Se estiver inserindo registro novo, defina o DataSet para INSERT e utilize o POST pra inserir, depois de todas as inserções use o APPLYUPDATES pra economizar chamada de função.
Se esse erro ocorrer ao inserir algum registro, verifique quem informa o valor de chave primária pra ser gravado no banco porque a lógica tá errada. |
não possui nenhuma chave primaria no banco com esse valor, e eu utilizo, insert, edit, os códigos são os seguintes :
botão novo : QryCadastro.Insert;
botão editar : QryCadastro.Edit;
botão salvar : QryCadastro.Post;
QryCadastro.ApplyUpdates();
o erro ocorre só em tempo de programação, não estoura o erro na aplicação, e os dados são gravados normalmente no banco de dados, e não tem como duplicar a chave primaria, pois quando vai salvar eu atribuo valor a ela através de um generator. |
|
| Voltar ao Topo |
|
 |
mobius1qwe Aprendiz

Registrado: Quarta-Feira, 8 de Dezembro de 2010 Mensagens: 146
|
Enviada: Qua Mar 25, 2015 5:33 pm Assunto: |
|
|
| Em qual linha ocorre o erro? Na linha do Post do salvar novo? Na linha do ApplyUpdates do editar? |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qua Mar 25, 2015 5:43 pm Assunto: |
|
|
quando estou inserido, insiro um novo cliente, clico em salvar, insiro o próximo ocorre o erro.
no botão salvar tenho esse código :
QryCadastro.Post;
QryCadastro.ApplyUpdates();
se tiver inserido ou editando ele da o Post e depois ApplyUpdates.
porem o erro ocorre só no insert. |
|
| Voltar ao Topo |
|
 |
mobius1qwe Aprendiz

Registrado: Quarta-Feira, 8 de Dezembro de 2010 Mensagens: 146
|
Enviada: Qui Mar 26, 2015 1:26 am Assunto: |
|
|
Então confere o seu gerador de índice de gravação. Ele tá gerando um valor que tá se repetindo na hora de gravar dando a violação de chave primária.
Se ce utilizar algum banco com autoincremento, só tome cuidado com as deleções. Sempre que você inserir um registro e deletar algum outro, vai dar problema na chave primária se a sua função for fraca.
Pra garantir que funcione bem, faça os seguintes testes:
- Abrir o sistema, com o banco de dados vazio, fazer 3 inserções em sequência. Fechar o sistema.
- Abrir o sistema, com o banco de dados populado, fazer 3 inserções em sequência. Fechar o sistema.
- Abrir o sistema, com o banco de dados vazio, inserir 3 registros, deletar o do meio, inserir mais 2. Fechar o Sistema.
- Abrir o sistema com o banco de dados populado, inserir 3 registros, deletar algum anterior aos inseridos, inserir mais 2. Fechar o sistema.
- Abrir o sistema, inserir 5 registros, apagar o segundo, quarto e quinto, inserir mais 5 registros. Fechar o sistema.
- Abrir o sistema, inserir 5 registros, apagar o 1º, 3º e 5º, inserir mais 5 registros. Fechar o sistema.
- Abrir o sistema, inserir 3 registros, fechar as telas até voltar pra tela inicial, deletar o registro do meio, fechar todas as telas até a inicial, inserir mais 2 registros. Fechar o sistema.
Se esses testes funcionarem sem erro. Sua função de gerar automaticamente o valor funcionará por um bom tempo sem dar problema. |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qui Mar 26, 2015 1:23 pm Assunto: |
|
|
| mobius1qwe, obg pelas dicas, vou realizar esses testes, vc tem skype ? |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qui Mar 26, 2015 6:56 pm Assunto: |
|
|
mobius1qwe, consegui resolver o problema, axo que ele estava ficando em memoria do FDQUERY, ele gravava no banco de dados mais ficava na memoria também, apos salvar eu fecho o FDQUERY e abro novamente, apos feito isso não ocorreu mais o erro.
não sei se ocorre somente com FIREDAC, pois trabalho com Dbexpress usando TsqlConection, DataSetProvider, ClientDataSet, e nunca tive esse problema. bem estranho |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qui Mar 26, 2015 8:14 pm Assunto: |
|
|
| RESOLVIDO. |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qui Mar 26, 2015 8:16 pm Assunto: |
|
|
| o que eu fiz foi apos salvar eu fecho a TFDQUERY "CLOSE". |
|
| Voltar ao Topo |
|
 |
adami Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010 Mensagens: 501
|
Enviada: Qui Mar 26, 2015 8:19 pm Assunto: |
|
|
| mobius1qwe, obrigado pela atenção |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|