Key Violation EDITANDO uma Tabela (FIREBIRD)

Delphi

22/01/2010

Pessoal, estou com um problema curioso.

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

Cis Informática

Curtidas 0

Respostas

Marcos Iwazaki

Marcos Iwazaki

22/01/2010

Amigo.
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.
 
GOSTEI 0
Cis Informática

Cis Informática

22/01/2010

Agradeço pela ajuda até agora, mas tentei o que você me sugeriu mas não funcionou. O erro persiste.

Se alguém tiver mais alguma ideia estou pronto a testar!

Valeu

Rodrigo
GOSTEI 0
Wagner Marrane

Wagner Marrane

22/01/2010

Boa noite.
Atualmente eu estou utilizando mais as query do que os comando pelos componentes como Edit. Aplico diretamente um update utilizando DBExpress. Fica mais rapido.
 
 
GOSTEI 0
Wagner Marrane

Wagner Marrane

22/01/2010

Na minhas aplicações não utilizos os DbEdits, estou utilizando Edit normais ontem eu carrego o conteudo nesses edit e utilizando a chavas para aplicar o update. Acredito ser muito mais rapidos e as sessões são criada individualmente no banco, obviamente vc deve criar um inicio de transação para montar um lock no registro para não ter problemas de outros usuários atualizarem.
 
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;
GOSTEI 0
POSTAR