Fórum Tratamento de erros #185793
02/10/2003
0
Quem poderia me responder o que significa o erro de exceção EDBEngineError, que é gerado quando eu tento salvar um registro que já existe no banco de dados. Fiz uma rotina que pesquisa os três campos no formulário que correspondem ao índice primário na tabela e dependendo do resultado da pesquisa, salvaria se não encontrasse nehum registro igual, o contrário deveria mostrar uma mensagem informando que já existe um registro com a mesma chave. Em vez de executar essa instrução é mostrada uma mensagem de erro do tipo EDBEngineError, dizendo que houve violação de chave, mas isso acontece porque tento salvar um registro que já existe na tabela com o mesmo índice, só que não está mostrando a mensagem que eu formulei. Alguém tem idéia de com resolver este problema?
Gláucia
:?: :?:
Galgomes
Curtir tópico
+ 0Posts
02/10/2003
Rodrigo Coutinho
Var Qry: tQuery;
Qry := tQuery.Create(Self);
With Qry do
Begin
DataBaseName := PathBase;
Sql.Clear;
Sql.Add(´Select Cmp1, Cmp2, Cmp3 From Tabela´);
Sql.Add(´Where (Cmp1=:Cm1) and (Cmp2=:Cm2) and (Cmp3=:Cm3)´);
ParamByName(´Cm1´).value := edit1.Text;
ParamByName(´Cm2´).value := edit2.Text;
ParamByName(´Cm3´).value := edit3.Text;
Open;
If Not isEmpt Then
MessageBox(´O registro já existe´);
Close;
Free;
End;
[]s, Rodrigo Coutinho
Gostei + 0
03/10/2003
Galgomes
Agora ao compilar aparece o seguinte erro:
[Error] Untveiculo.pas(386): Undeclared identifier: ´isEmpt´
[Error] Untveiculo.pas(387): Incompatible types: ´HWND´ and ´String´
E veja como ficou o meu código:
Var Qry: tQuery;
begin
Qry := tQuery.Create(Self);
With Qry do
Begin
DataBaseName :=´onibus´;
Sql.Clear;
Sql.Add(´Select cod_emp, pref_linha, num_veiculo From Table_veiculos´);
Sql.Add(´Where (cod_emp=:cod_emp1) and (pref_linha=:pref_linha1) and (num_veiculo=:num_veiculo1)´);
ParamByName(´cod_emp1´).value := dbedit1.Text;
ParamByName(´pref_linha1´).value := dbedit2.Text;
ParamByName(´num_veiculo´).value := dbedit3.Text;
Open;
If Not isEmpt Then
MessageBox(´O veículo já existe´);
Close;
Free;
Gostei + 0
03/10/2003
Fabio.hc
Tente assim:
try
query.insert
...
query.post
except
showmessage(´ sua mensagem´)
end;
Gostei + 0
03/10/2003
Galgomes
Eu fiz a mudança que vc sugeriu, só que antes de aparecer a minha mensagem, mostra a mensagem do delphi de erro ´EDBEngineError´.
Veja como ficou:
Try
DM.Table_veiculos.setkey;
DM.Table_veiculos[´cod_emp´]:=dbedit1.text;
DM.Table_veiculos[´pref_linha´]:=dbedit2.text;
DM.Table_veiculos[´num_veiculo´]:=dbedit3.text;
DM.Table_veiculos.gotokey;
If not DM.Table_veiculos.gotokey then
Begin
showmessage(´O registro será salvo´);
DM.Table_veiculos.open;
DM.Table_veiculos.insert;
DM.Table_veiculos.post;
form4.show;
form4.pagecontrol1.ActivePageIndex:=2;
End
Except
showmessage(´Já existe um veículo com o mesmo nº de ordem´);
form4.show;
form4.pagecontrol1.ActivePageIndex:=2;
form4.dblookupcombobox3.SetFocus;
End;
Gostei + 0
03/10/2003
Fabio.hc
Gostei + 0
07/10/2003
Galgomes
Quando eu tento salvar um registro que com certeza ainda não existe na tabela, ele mostra a mensagem “Já existe um veículo com o mesmo nº de ordem”, mas salva mesmo assim o registro, porém não mostra a mensagem ´O registro será salvo´, ou seja entra direto no except e executa as intruções.
E quando eu tento salvar um registro que já existe na tabela ele executa as intstruções do Except, ou seja mostra a mensagem “ Já existe um veículo com o mesmo nº de ordem” e abre o FORM4, até aí tudo bem, o problema é quando tento novamente voltar para o formulário de veículos e continua com o registro que estava tentando salvar, e ao tentar navegar por entre os registros mostra umas mensagens de erros.
O código ficou assim:
Try
DM.Table_veiculos.open;
DM.Table_veiculos.setkey;
DM.Table_veiculos[´cod_emp´]:=dbedit1.text;
DM.Table_veiculos[´pref_linha´]:=strtoint(dbedit2.text);
DM.Table_veiculos[´num_veiculo´]:=strtoint(dbedit3.text);
DM.Table_veiculos.gotokey;
If not DM.Table_veiculos.gotokey then
Begin
showmessage(´O registro será salvo´);
DM.Table_veiculos.append;
DM.Table_veiculos.post;
form4.show;
form4.pagecontrol1.ActivePageIndex:=2;
End
Except
Begin
showmessage(´Já existe um veículo com o mesmo nº de ordem´);
form4.show;
form4.pagecontrol1.ActivePageIndex:=2;
form4.dblookupcombobox3.SetFocus;
End;
End;
Agradeço sua atenção,
Glaucia.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)