Erros do Interbase no Delphi
Olá galera,
como se faz para tratar os erros do Interbase no Delphi ???
Erros como:
Violação de Primary Key,
Qdo tento remover um item que possui Foreig Key e que
está sendo utilizado por outra tabela
Erro qdo ao conectar, não é encontrado o arquivo .gdb
Eu uso o [b:dbc696e738]TRY... EXCEPT...[/b:dbc696e738]
mas naum sei como tratar estes erros do Interbase.
Grato se alguem puder me ajudar.
T+
como se faz para tratar os erros do Interbase no Delphi ???
Erros como:
Violação de Primary Key,
Qdo tento remover um item que possui Foreig Key e que
está sendo utilizado por outra tabela
Erro qdo ao conectar, não é encontrado o arquivo .gdb
Eu uso o [b:dbc696e738]TRY... EXCEPT...[/b:dbc696e738]
mas naum sei como tratar estes erros do Interbase.
Grato se alguem puder me ajudar.
T+
Eniorm
Curtidas 0
Respostas
Luizfernando777
07/09/2003
Olá colega,
A respeito da chave primária não vou poder ajula-lo,
pois trabalho de uma forma diferente sobre o mesmo,
Sobre o erro de não encontrar o gdb,
vc mesmo já respondeu,
faz a procura do mesmo antes de conectar o ibDataBase,
if not FileExists(´LocalenomedaBase´) then
begin
if OpenDialog.Execute then
begin
´IMPLEMENTAR O CÓDIGO´ CONFORME A SUA NECESSIDADE,
se você precisar de um exemplo me manda o seu e-mail
que mando um exemplo
até +
A respeito da chave primária não vou poder ajula-lo,
pois trabalho de uma forma diferente sobre o mesmo,
Sobre o erro de não encontrar o gdb,
vc mesmo já respondeu,
faz a procura do mesmo antes de conectar o ibDataBase,
if not FileExists(´LocalenomedaBase´) then
begin
if OpenDialog.Execute then
begin
´IMPLEMENTAR O CÓDIGO´ CONFORME A SUA NECESSIDADE,
se você precisar de um exemplo me manda o seu e-mail
que mando um exemplo
até +
GOSTEI 0
Vinicius2k
07/09/2003
Enio,
Eu também estou a procura de melhores formas para tratar os erros, inclusive descobrir os códigos de erro, q ainda não encontrei em lugar nenhum... mas o principio, acredito ser o mesmo que utilizavamos para tratar os erros do Paradox, um exemplo de como tenho usado :
sabendo os códigos de erro vc poderá implementar mais ou menos assim
soh um detalhe : vc precisa acrescentar na lista de uses a unit IB (neste exemplo estou usando IBX)...
a função FileExists citada pelo colega não será de grande valia caso seu banco de dados seja remoto, por exemplo : ela sempre retornará false caso seu banco seja : ´servidor:c:\banco\banco.gdb´...
espero ter ajudado...
Eu também estou a procura de melhores formas para tratar os erros, inclusive descobrir os códigos de erro, q ainda não encontrei em lugar nenhum... mas o principio, acredito ser o mesmo que utilizavamos para tratar os erros do Paradox, um exemplo de como tenho usado :
function IBDB_conectar: Boolean;
begin
try
IBDB_main.Connected:= true;
result:= true;
except
on erro: EIBInterbaseError do
begin
Application.MessageBox(Pchar(´Não foi possível conectar ao Banco de Dados e foi retornada a seguinte mensagem de erro: ´´+ erro.message+´´.´),´Erro´,mb_iconhand+mb_ok);
result:= false;
end;
end;
end;
sabendo os códigos de erro vc poderá implementar mais ou menos assim
function Tfrm_IBGA.IBDB_conectar: Boolean;
begin
try
IBDB_main.Connected:= true;
result:= true;
except
on erro: EIBInterbaseError do
begin
case erro.Errors[0].ErrorCode of
1: showmessage(´erro tal...´);
2: showmessage(´erro tal...´);
end;
{ ação à executar no caso de erro }
end;
end;
end;
soh um detalhe : vc precisa acrescentar na lista de uses a unit IB (neste exemplo estou usando IBX)...
a função FileExists citada pelo colega não será de grande valia caso seu banco de dados seja remoto, por exemplo : ela sempre retornará false caso seu banco seja : ´servidor:c:\banco\banco.gdb´...
espero ter ajudado...
GOSTEI 0
Luizfernando777
07/09/2003
Caro Colega,
desculpe pela informação,
este exemplo aue lhe enviei eu uso em meu projeto 3 camadas,
e a comunicação do Cliente é feito por IP
desculpe pela informação,
este exemplo aue lhe enviei eu uso em meu projeto 3 camadas,
e a comunicação do Cliente é feito por IP
GOSTEI 0
Eniorm
07/09/2003
function IBDB_conectar: Boolean;
begin
try
IBDB_main.Connected:= true;
result:= true;
except
on erro: EIBInterbaseError do
begin
Application.MessageBox(Pchar(´Não foi possível conectar ao Banco de Dados e foi retornada a seguinte mensagem de erro: ´´+ erro.message+´´.´),´Erro´,mb_iconhand+mb_ok);
result:= false;
end;
end;
end;
======================================
function Tfrm_IBGA.IBDB_conectar: Boolean;
begin
try
IBDB_main.Connected:= true;
result:= true;
except
on erro: EIBInterbaseError do
begin
case erro.Errors[0].ErrorCode of
1: showmessage(´erro tal...´);
2: showmessage(´erro tal...´);
end;
{ ação à executar no caso de erro }
end;
end;
end;
Ok, cara, mas essa variavel ERRO q vc declarou ???
T+
GOSTEI 0
Vinicius2k
07/09/2003
não entendi sua dúvida... eu a declarei para q ela receba a mensagem de erro q foi retornada pela exceção... ela não precisa ser declarada antes... essa eh a declaração dela :
on [color=blue:93a7bea47c]erro: EIBInterbaseError[/color:93a7bea47c] do
on [color=blue:93a7bea47c]erro: EIBInterbaseError[/color:93a7bea47c] do
GOSTEI 0
Eniorm
07/09/2003
não entendi sua dúvida...
Essa variável ERRO é de que tipo?? Exception ???
Eu já tenteu usar o seguinte
var e : Exception; ... try ... except on e: EIBInterBaseError do ... ...
mas [color=blue:3cb6709e73]EIBInterBaseError[/color:3cb6709e73] o sistema
informava que era desconhecida.
T+
GOSTEI 0
Vinicius2k
07/09/2003
agora entendi...
foi por isso q eu disse :
este tipo estah definido na unit ´IB´... vc precisa referenciá-la nas suas uses..
T+
foi por isso q eu disse :
soh um detalhe : vc precisa acrescentar na lista de uses a unit IB...
este tipo estah definido na unit ´IB´... vc precisa referenciá-la nas suas uses..
T+
GOSTEI 0
Eniorm
07/09/2003
ok entaum cara muito obrigado, com certeza
tá resolvido...!
T+
tá resolvido...!
T+
GOSTEI 0