Tratamento de erros

Delphi

02/10/2003

Olá pessoal,

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

Galgomes

Curtidas 0

Respostas

Rodrigo Coutinho

Rodrigo Coutinho

02/10/2003

Olá posso te ajudar da seguinte forma, antes de dar o post ou o insert faça o seguinte que concerteza nao falhará:

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
Galgomes

Galgomes

02/10/2003

Rodrigo,

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
Fabio.hc

Fabio.hc

02/10/2003

Olá pessoal, 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 :?: :?:



Tente assim:

try
query.insert
...
query.post
except
showmessage(´ sua mensagem´)
end;


GOSTEI 0
Galgomes

Galgomes

02/10/2003

Fábio,

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
Fabio.hc

Fabio.hc

02/10/2003

Tente rodar o executável sem o delphi.


GOSTEI 0
Galgomes

Galgomes

02/10/2003

Oi Fábio, sou eu de novo, Gláucia, fiz o que vc sugeriu e deu certo, não mostra a mensagem de erro do delphi e sim a minha. Só que tem outro problema para resolver:
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
POSTAR