Aparecer erro quando não encontra tabela

Delphi

14/05/2007

Tenho um programa que precisa de uma tabela (.mdb) para funcionar, só que se essa tabela for renomeada ou trocada de pasta, o programa fecha sem aparecer mensagem de erro.

Gostaria que aparecesse uma mensagem dizendo que não encontrou o arquivo tal e desse a opção de localizá-lo antes de abrir a aplicação.

Acho que se faz isso com os comandos [b:929667fcf5]try exept[/b:929667fcf5] só que não tenho idéia de como utilizá-los.


Vagner.oliveira

Vagner.oliveira

Curtidas 0

Respostas

Marco Salles

Marco Salles

14/05/2007

no caso mais simplista simplesmente voce pode :

try -->>métpodos que chama a tabela ou faz uso dela except showmessage(´ERRO : Operação ilegal . tabela Tal não existe , não foi encontrada ou foi renomeada etc...´) end; //fim do bloco try exceptd



GOSTEI 0
Paullsoftware

Paullsoftware

14/05/2007

Ou por outra fazer uma verificação se o arquivo existe

if not FileExists(´NomeArquivo´) then
//Mesangem de erro

:wink:


GOSTEI 0
Martins

Martins

14/05/2007

No seu caso o código passado pelo [b:1e607adf94]Marco Salles[/b:1e607adf94] é o mais indicado, com ele vc vai ter o retorno esperado.

boa sorte!

PS: O Código do [b:1e607adf94]paullsoftware[/b:1e607adf94] não funcionaria pq as tabelas estão fisicamente dentro do arquivo MDB, se fosse Paradox ou outro similar funcionaria tb.

t+


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

14/05/2007

Entre o [b:51c76629e6]Try e Exept [/b:51c76629e6]está tudo ok, mas depois deles o form não abre.

Coloquei 3 forms pra teste:

Form1 -> está a tabela a ser mostrada.
Form2 -> quando a tabela não é encontrada abre o Form2 para localizá-la
Form3 -> é o ´splash´ que depois de fechado verifica se a tabela está junto ao executável.

Form3 - ´Splash´ (é que coloquei um botão pra fechar manualmente, nada de mais)

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Hide;
Form1.Table1.Close;
try
Form1.Table1.DatabaseName:=Form1.Table2.FieldByName(´caminho´).AsString;
Form1.Table1.Open;
except
Form2.StatusBar1.Panels[0].Text:=Form1.Table2.FieldByName(´caminho´).AsString;
showmessage(´ERRO: tabela não encontrada selecione o caminho coreto´);
Form2.ShowModal;
end; {fim do bloco try exceptd
quando as 2 ações acima estão Ok ele executa os
comandos descritos abaixo}
ShowMessage(´Fim do bloco Exept´);
Form1.Show;
end;



Form2 - Local para selecionar o caminho da tabela
procedure TForm2.Button1Click(Sender: TObject);
begin
Form1.Table1.Close;
try
Form1.Table1.DatabaseName:=ShellTreeView1.Path +´\´;
Form1.Table1.Open;
Form1.Show;
except
showmessage(´ERRO: tabela não encontrada selecione o caminho coreto´);
end; //fim do bloco try exceptd
StatusBar1.Panels[0].Text:=ShellTreeView1.Path +´\´;
Form1.Table2.Edit;
Form1.Table2.FieldByName(´caminho´).AsString:=ShellTreeView1.Path +´\´;
Form1.Table2.Post;
end;



Form1 - Se o caminho da tabela está ok ele abre.
procedure TForm1.FormShow(Sender: TObject);
begin
Form2.Hide;
end;


-
-
[size=16:51c76629e6]O problema é que depois do try e exept estarem OK o form 1 não abre, ele pisca e fecha o programa.

Lá no avaliable forms coloquei um a um para o outro lado (sendo que o form3 é o q abre primeiro) e persiste o erro.
[/size:51c76629e6]


GOSTEI 0
Paullsoftware

Paullsoftware

14/05/2007

No seu caso o código passado pelo [b:b7b5814884]Marco Salles[/b:b7b5814884] é o mais indicado, com ele vc vai ter o retorno esperado. boa sorte! PS: O Código do [b:b7b5814884]paullsoftware[/b:b7b5814884] não funcionaria pq as tabelas estão fisicamente dentro do arquivo MDB, se fosse Paradox ou outro similar funcionaria tb. t+

Valeu Martins, foi uma leitura errada... eu li como arquivo mdb e não tabela, desculpa ae o vacilo!! :oops:


GOSTEI 0
Martins

Martins

14/05/2007

[quote:cddc511a0d=´Martins´]No seu caso o código passado pelo [b:cddc511a0d]Marco Salles[/b:cddc511a0d] é o mais indicado, com ele vc vai ter o retorno esperado. boa sorte! PS: O Código do [b:cddc511a0d]paullsoftware[/b:cddc511a0d] não funcionaria pq as tabelas estão fisicamente dentro do arquivo MDB, se fosse Paradox ou outro similar funcionaria tb. t+

Valeu Martins, foi uma leitura errada... eu li como arquivo mdb e não tabela, desculpa ae o vacilo!! :oops:[/quote:cddc511a0d]

Tranquilo meu irmão, fica frio isso acontece.

[b:cddc511a0d]vagner.oliveira[/b:cddc511a0d] Tente trocar [b:cddc511a0d]Show[/b:cddc511a0d] por [b:cddc511a0d]ShowModal[/b:cddc511a0d].


GOSTEI 0
Vagner.oliveira

Vagner.oliveira

14/05/2007

tentei show, showmodal, application.inicialize e nada. alguma dica?


GOSTEI 0
POSTAR