(Key Violation of Primary or unique key constraint)
Meus amigos do forum, eis a minha dúvida.
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
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
Curtidas 0
Respostas
Vinicius2k
22/07/2004
Plácido,
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 :
Para exibir a mensagem de erro do banco trabalhe no evento OnReconcileError do CDS por exemplo :
Espero ter ajudado...
T+
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
Djjunior
22/07/2004
o metódo de gravação não está no meio de um try não ? Neste
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;
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
Vinicius2k
22/07/2004
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
Placido
22/07/2004
Meus amigos obrigado pelas dicas...
Vou implementar e retorno a informação se deu certo ou não.
Obrigado :roll:
Plácido
Vou implementar e retorno a informação se deu certo ou não.
Obrigado :roll:
Plácido
GOSTEI 0
Placido
22/07/2004
Estou utilizando o método ApplyUpdates(-1).
Grato :roll:
Grato :roll:
GOSTEI 0
Placido
22/07/2004
No evento after uso o comando abaixo:
(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
(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
Placido
22/07/2004
No evento after uso o comando abaixo:
(DataSet as TClientDataSet).ApplyUpdates(-1);
No evento OnReconcileError do CDS da dica coloquei este comando
ShowMessage(E.Message);
Estou aguardando ajuda dos colegas.......
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
Placido
22/07/2004
Meus colegas deu certo, agora estou recebendo a mensagem de chave duplicada, agora quero transofrmar esta mensagem de erro, em portugues, ex. (Código já gravado).
Obrigado pelas dicas.
Plácido
Obrigado pelas dicas.
Plácido
GOSTEI 0
Vinicius2k
22/07/2004
Placido,
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 :
Espero ter ajudado...
T+
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
Placido
22/07/2004
Vinícius Obrigado pela dica, fique com Deus.
Um abraço.
Plácido
Um abraço.
Plácido
GOSTEI 0