ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

erro no ApplyUpdates, usando FIREDAC [RESOLVIDO]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Ter Mar 24, 2015 10:17 pm    Assunto: erro no ApplyUpdates, usando FIREDAC [RESOLVIDO] Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Ter Mar 24, 2015 10:25 pm    Assunto: Responder com Citação

a propriedade CACHEDUPDATES esta como TRUE.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
mobius1qwe
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 8 de Dezembro de 2010
Mensagens: 146

MensagemEnviada: Qua Mar 25, 2015 2:24 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qua Mar 25, 2015 5:20 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
mobius1qwe
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 8 de Dezembro de 2010
Mensagens: 146

MensagemEnviada: Qua Mar 25, 2015 5:33 pm    Assunto: Responder com Citação

Em qual linha ocorre o erro? Na linha do Post do salvar novo? Na linha do ApplyUpdates do editar?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qua Mar 25, 2015 5:43 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
mobius1qwe
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 8 de Dezembro de 2010
Mensagens: 146

MensagemEnviada: Qui Mar 26, 2015 1:26 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qui Mar 26, 2015 1:23 pm    Assunto: Responder com Citação

mobius1qwe, obg pelas dicas, vou realizar esses testes, vc tem skype ?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qui Mar 26, 2015 6:56 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qui Mar 26, 2015 8:14 pm    Assunto: Responder com Citação

RESOLVIDO.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qui Mar 26, 2015 8:16 pm    Assunto: Responder com Citação

o que eu fiz foi apos salvar eu fecho a TFDQUERY "CLOSE".
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
adami
Profissional
Profissional


Registrado: Sexta-Feira, 12 de Novembro de 2010
Mensagens: 501

MensagemEnviada: Qui Mar 26, 2015 8:19 pm    Assunto: Responder com Citação

mobius1qwe, obrigado pela atenção
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB