Key Violation EDITANDO uma Tabela (FIREBIRD)

22/01/2010

1

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
Responder

Posts

25/01/2010

Marcos Iwazaki

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.
 
Responder
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
Responder

27/01/2010

Wagner Marrane

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.
 
 
Responder

01/02/2010

Wagner Marrane

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;
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira