Fórum (Key Violation of Primary or unique key constraint) #243972
22/07/2004
0
Utilizando o ibExpert tento fazer uma inclusao numa tabela qualquer
cuja chave primária já existe me retorna uma mensagem em ingles (Key Violation of Primary or unique key constraint) até aí tudo perfeito, mas quando rodo a minha aplicação digito o código sabendo que já existe na tabela para forçar o erro de chave duplicada, clico no botão gravar
e não recebo o retorno de chave primária já cadastrada.
Utilizo o delphi 7, componente dbExpress e banco de dados firebird 1.5
Utlizo os seguintes componentes:
sqlConnection, sqlDataSet, dataSetProvider, clientDataSet e o DataSource.
Tenho que alterar alguma propriedade de um destes componentes para receber esta mensagem de erro?
:?:
Plácido
Placido
Curtir tópico
+ 0Posts
22/07/2004
Vinicius2k
Vc está executando a instrução SQL diretamente no banco ou utilizando o ApplyUpdates do ClientDataSet ?
Se for ApplyUpdates, ele não gera exceção caso não consiga aplicar os updates ele apenas retorna um número de erros facilmente testado com :
if CDS.ApplyUpdates(0) = 0 then // não houveram erros else // houveram erros
Para exibir a mensagem de erro do banco trabalhe no evento OnReconcileError do CDS por exemplo :
ShowMessage(E.Message);
Espero ter ajudado...
T+
Gostei + 0
22/07/2004
Djjunior
coloque uma instrução tipo
try
SuaTable.Post;
except
on e: exept do
messagedlg(´Erro ao gravar dados na tabela ! O erro foi:´ + #13 +
e.message, mtwarning, [mbok], 0);
end;
end;
Gostei + 0
22/07/2004
Vinicius2k
try SuaTable.Post; except on e: exept do messagedlg(´Erro ao gravar dados na tabela ! O erro foi:´ + #13 + e.message, mtwarning, [mbok], 0); end; end;
:?: isto não se aplica em ClientDataSets para verificar erros oriundos do banco... e se a instrução SQL for direta o caminho seria buscar a exceção do método seria ExecSQL da SQLQuery ou SQLDataSet...
Gostei + 0
22/07/2004
Placido
Vou implementar e retorno a informação se deu certo ou não.
Obrigado :roll:
Plácido
Gostei + 0
22/07/2004
Placido
Grato :roll:
Gostei + 0
22/07/2004
Placido
(DataSet as TClientDataSet).ApplyUpdates(-1);
No evento OnReconcileError do CDS da dica coloquei este comando
ShowMessage(E.Message);
Deu a mensagem de erro beleza, mas dá uma mensagem especificando o número do erro e o nome da tabela, como proceder para enviar a mensagem em portugues? ex. (Código já cadastrado)?
Obrigado pela ajuda.
Um abraço
Gostei + 0
22/07/2004
Placido
Gostei + 0
23/07/2004
Placido
Obrigado pelas dicas.
Plácido
Gostei + 0
23/07/2004
Vinicius2k
Não mostre diretamente E.Message, mas lembre-se de que esta mensagem pode não ser a única mensagem de erro que o banco retorna então é aconselhável tratar as conhecidas, mas deixar que seja exibida a original caso não se enquadre como conhecida... faça algo parecido com isto :
if Copy(E.Message,1,13) = ´Key Violation´ then ShowMessage(´Codigo já existente.´) else ShowMessage(E.Message);
Espero ter ajudado...
T+
Gostei + 0
23/07/2004
Placido
Um abraço.
Plácido
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)