Key Violation EDITANDO uma Tabela (FIREBIRD)
22/01/2010
0
Tenho um banco FIREBIRD. Nesse banco tem a tabela CLIENTES.
No programa, quando o usuário escolhe um cliente já cadastrado, o programa traz os dados normais pra tela e tudo mais.
O usuário clica no DBEDIT que quer alterar (celular por exemplo, mas pode ser qualquer um).
Aí vem o problema: Depois de selecionar o DBEDIT, qualquer tecla que o usuário apertar, faz o programa apresentar uma mensagem de erro (KEY VIOLATION)!!!!
Só que estou EDITANDO a tabela! Não INSERINDO!
Verifiquei que em nenhum campo tem eventos ONCHANGE e nehum DBEDIT tem qualquer evento também.
Detalhe: Só acontece no meu cliente. Aqui na empresa funciona beleza, sem erros.
OBS: O servidor deles é um Linux com o programa Samba.
Já agradeço pela ajuda.
Rodrigo
Cis Informática
Posts
25/01/2010
Marcos Iwazaki
Vc esta usando ClientDataSet e Providers e SQLQuery?
Se for isso, então veja se nos SQLQuery vc configurou os providers key para setar quais campos são chave.
Depois veja se realmente não tem registros duplicados no seu sql tbm.
26/01/2010
Cis Informática
Se alguém tiver mais alguma ideia estou pronto a testar!
Valeu
Rodrigo
27/01/2010
Wagner Marrane
Atualmente eu estou utilizando mais as query do que os comando pelos componentes como Edit. Aplico diretamente um update utilizando DBExpress. Fica mais rapido.
01/02/2010
Wagner Marrane
Faça um select com resultset carregue os edit e caputura a chave primaria deixe o usuário efetuar as alterações e aplique um update a partir desses edits.
Ex.
cQuery := 'UPDATE CONFESCOLAR SET ';
cQuery := cQuery + 'matm = '+#39+matm.Text+#39;
cQuery := cQuery + ',matf= '+#39+matf.Text+#39;
cQuery := cQuery + ',mbm= '+#39+mbm.Text+#39;
cQuery := cQuery + ',mbf= '+#39+mbf.Text+#39;
cQuery := cQuery + ',mdm= '+#39+mdm.Text+#39;
cQuery := cQuery + ',mdf= '+#39+mdf.Text+#39;
cQuery := cQuery + ',mfsm= '+#39+mfsm.Text+#39;
cQuery := cQuery + ',mfsf= '+#39+mfsf.Text+#39;
cQuery := cQuery + ',mhm= '+#39+mhm.Text+#39;
cQuery := cQuery + ',mhf= '+#39+mhf.Text+#39;
cQuery := cQuery + ',mtmmi= '+#39+mtmmi.Text+#39;
cQuery := cQuery + ',mtmfi= '+#39+mtmfi.Text+#39;
cQuery := cQuery + ',mtmmd= '+#39+mtmmd.Text+#39;
cQuery := cQuery + ',mtmfd= '+#39+mtmfd.Text+#39;
cQuery := cQuery + ',mtmm= '+#39+mtmm.Text+#39;
cQuery := cQuery + ',mtmf= '+#39+mtmf.Text+#39;
cQuery := cQuery + ',mvm= '+#39+mvm.Text+#39;
cQuery := cQuery + ',mvf= '+#39+mvf.Text+#39;
cQuery := cQuery + ',mxm= '+#39+mxm.Text+#39;
cQuery := cQuery + ',mxf= '+#39+mxf.Text+#39;
cQuery := cQuery + ' where codigo = '+#39+intTostr(nCodigo) +#39;
cTexto := 'Atualização das escolas';
FrmSorteio.GravaCmdSQL(cQuery, cTexto);
with cldsPesquisa do
begin
Close;
CommandText := cQuery;
Execute;
end;
Clique aqui para fazer login e interagir na Comunidade :)