 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
luciocampetti Aprendiz

Registrado: Domingo, 25 de Agosto de 2013 Mensagens: 128 Localização: Passo Fundo - RS
|
Enviada: Sex Set 20, 2013 11:32 am Assunto: Como tratar esta excecao no delphi 7? |
|
|
Uso Delphi 7 e Firebird
Tenho uma pesquisa por cep pela web no cadastro, quando o usuário insere o cep ex: 12345-678 e o cep esta correto ele preenche os campos cidade endereço ate ai ele funciona bem. O problema é que quando o usuário não possui a conexão e o mesmo digita um cep e manda pesquisar gera a seguinte exceção:
| Código: |
Excessao:
nomedoprojeto ExceptionClass EidSocketError with message Socket Error #11004. Process stopped, press run continue.
|
Utilizo o seguinte código para a pesquisa do cep:
| Código: |
procedure TFrmCadastro.BtnBuscaCepClick(Sender: TObject);
// Programa de Consulta CEP.
// Nome do Programa: WebSvrCEP.
// Power by: Johnny Walker.
// email: johnny-walker@ig.com.br.
// Data: 01-06-2008.
// Licença: pública.
// Localização: Contagem/MG - Brazil.
// A quem utilizar favor manter os créditos acima.
// Logo acima de Implementation.
// Declarar na secao var: TSConsulta: TStringList;
var
Consulta: String;
Resposta: TStringStream;
begin
if (DBdtCep.Text = '') or (Length(DBdtCep.Text) <8> 8) then
begin
beep;
Application.MessageBox('Cep nulo ou inválido.'+#13+'Digite somente números.', 'Pesquisar Cep', MB_ICONINFORMATION+mb_ok);
exit; //Se Campo Cep estiver vazio ou receber menos de 8 digitos
end; //ou receber mais de 8 digitos apresente a mensagem abaixo.
//RichEdit1.Clear;
Resposta := TStringStream.Create('');
TSConsulta := TStringList.Create;
DTM.IdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV2';
TSConsulta.Values['&cep'] := DBdtCep.Text;
TSConsulta.Values['&formato'] := 'xml';
//TSConsulta.Values['&formato'] := 'query_string';
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
*DTM.XMLBuscaCEP.Active := True;*
DTM.XMLBuscaCEP.Encoding := 'iso-8859-1';
DTM.XMLBuscaCEP.LoadFromStream(Resposta);
try
try
DBdtEndereco.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['tipo_logradouro'].NodeValue+' '+DTM.XMLBuscaCEP.DocumentElement.ChildNodes['logradouro'].NodeValue;
DBdtBairro.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['bairro'].NodeValue;
DBdtCidade.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['cidade'].NodeValue;//+', '+DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
//DBdtEstado.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
//DBCBoxEstado.Text:= DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
finally
TSConsulta.Free;
Resposta.Free;
end;
except
//ShowMessage('Erro!! Cep inexistente. Mensagem de Origem:'+DTM.XMLBuscaCep.DocumentElement.ChildNodes['resultado_txt'].NodeValue);
Application.MessageBox('Cep nulo ou inválido.'+#13+'Digite somente números.', 'Pesquisa Cep', MB_ICONINFORMATION+MB_Ok);
//Exit;
//Abort;
//
//Codigo para mostrar mensagem caso o usuario digite
//um Cep nao valido (exemplo: 87453298, 00000000, neste
//caso, aparece uma mensagem para o mesmo perguntando se
//ele quer preencher os campos de forma manual.
//
if messagebox(Handle,'Deseja preencher os campos'#13'Cep, Endereço, Bairro e '#13'Cidade de forma manual?','Pesquisa Cep',mb_yesno+MB_ICONINFORMATION)= idyes then
begin //Sim desejo preencher manualmente.
GroupBox1.Enabled:= True;
//Habilitar Campos
DBdtEndereco.Enabled:=true;
DBdtBairro.Enabled:=true;
DBdtCidade.Enabled:=true;
DBCBoxEstado.Enabled:=true;
DBdtCep.SetFocus; //setar foco campo
//habilitar campos
DBdtEndereco.ReadOnly:= False;
DBdtBairro.ReadOnly:= False;
DBdtCidade.ReadOnly:= False;
DBCBoxEstado.Enabled:= True;
//habilitar escrita
end
else
begin //Nao, pular esta parte.
GroupBox1.Enabled:= True;
//Habilitar Campos
DBdtEndereco.Text:= 'REGISTROVAZIO';
DBdtNumero.Text:= '00';
DBdtComplemento.Text:= 'REGISTROVAZIO';
DBdtBairro.Text:= 'REGISTROVAZIO';
DBdtCidade.Text:= 'REGISTROVAZIO';
DBCBoxEstado.Text:= '';
DBdtEndereco.Enabled:=False;
DBdtBairro.Enabled:=False;
DBdtCidade.Enabled:=False;
DBCBoxEstado.Enabled:=True;
DBdtTelRes.SetFocus;
end;
end;
DTM.XMLBuscaCEP.Active := False;
//comando PesquisaCep.
end;
|
Uso o componente da paleta Indy 1 XMLDocument e 1 TidHttp
Quando gera a exceção o compilador para na linha entre * *
Como tratar essa exceção? |
|
| Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Sex Set 20, 2013 2:46 pm Assunto: |
|
|
Faz assim :
| Código: |
Try
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
Except
ShowMessage ('Problemas na conexão');
End;
|
[/code] |
|
| Voltar ao Topo |
|
 |
luciocampetti Aprendiz

Registrado: Domingo, 25 de Agosto de 2013 Mensagens: 128 Localização: Passo Fundo - RS
|
Enviada: Sex Set 20, 2013 4:13 pm Assunto: |
|
|
| claudio.ferreira escreveu: | Faz assim :
| Código: |
Try
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
Except
ShowMessage ('Problemas na conexão');
End;
|
[/code] |
Coloquei a sua sugestão mas ele ainda aparece a mensagem de erro de socket socket error #11004 e a mensagem implementada não aparece.
Alguma sugestão:
Fiz assim:
| Código: |
procedure TFrmCadastro.BtnBuscaCepClick(Sender: TObject);
// Programa de Consulta CEP.
// Nome do Programa: WebSvrCEP.
// Power by: Johnny Walker.
// email: johnny-walker@ig.com.br.
// Data: 01-06-2008.
// Licença: pública.
// Localização: Contagem/MG - Brazil.
// A quem utilizar favor manter os créditos acima.
// Logo acima de Implementation.
// Declarar na secao var: TSConsulta: TStringList;
var
Consulta: String;
Resposta: TStringStream;
begin
if (DBdtCep.Text = '') or (Length(DBdtCep.Text) <8> 8) then
begin
beep;
Application.MessageBox('Cep nulo ou inválido.'+#13+'Digite somente números.', 'Pesquisar Cep', MB_ICONINFORMATION+mb_ok);
exit; //Se Campo Cep estiver vazio ou receber menos de 8 digitos
end; //ou receber mais de 8 digitos apresente a mensagem abaixo.
//RichEdit1.Clear;
Resposta := TStringStream.Create('');
TSConsulta := TStringList.Create;
DTM.IdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV2';
TSConsulta.Values['&cep'] := DBdtCep.Text;
TSConsulta.Values['&formato'] := 'xml';
//TSConsulta.Values['&formato'] := 'query_string';
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
DTM.XMLBuscaCEP.Active := True;
try
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
Except
ShowMessage ('Problemas na conexão');
end;
DTM.XMLBuscaCEP.Encoding := 'iso-8859-1';
DTM.XMLBuscaCEP.LoadFromStream(Resposta);
try
try
DBdtEndereco.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['tipo_logradouro'].NodeValue+' '+DTM.XMLBuscaCEP.DocumentElement.ChildNodes['logradouro'].NodeValue;
DBdtBairro.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['bairro'].NodeValue;
DBdtCidade.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['cidade'].NodeValue;//+', '+DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
//DBdtEstado.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
//DBCBoxEstado.Text:= DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
finally
TSConsulta.Free;
Resposta.Free;
end;
except
//ShowMessage('Erro!! Cep inexistente. Mensagem de Origem:'+DTM.XMLBuscaCep.DocumentElement.ChildNodes['resultado_txt'].NodeValue);
Application.MessageBox('Cep nulo ou inválido.'+#13+'Digite somente números.', 'Pesquisa Cep', MB_ICONINFORMATION+MB_Ok);
//Exit;
//Abort;
//
//Codigo para mostrar mensagem caso o usuario digite
//um Cep nao valido (exemplo: 87453298, 00000000, neste
//caso, aparece uma mensagem para o mesmo perguntando se
//ele quer preencher os campos de forma manual.
//
if messagebox(Handle,'Deseja preencher os campos'#13'Cep, Endereço, Bairro e '#13'Cidade de forma manual?','Pesquisa Cep',mb_yesno+MB_ICONINFORMATION)= idyes then
begin //Sim desejo preencher manualmente.
GroupBox1.Enabled:= True;
//Habilitar Campos
DBdtEndereco.Enabled:=true;
DBdtBairro.Enabled:=true;
DBdtCidade.Enabled:=true;
DBCBoxEstado.Enabled:=true;
DBdtCep.SetFocus; //setar foco campo
//habilitar campos
DBdtEndereco.ReadOnly:= False;
DBdtBairro.ReadOnly:= False;
DBdtCidade.ReadOnly:= False;
DBCBoxEstado.Enabled:= True;
//habilitar escrita
end
else
begin //Nao, pular esta parte.
GroupBox1.Enabled:= True;
//Habilitar Campos
DBdtEndereco.Text:= 'REGISTROVAZIO';
DBdtNumero.Text:= '00';
DBdtComplemento.Text:= 'REGISTROVAZIO';
DBdtBairro.Text:= 'REGISTROVAZIO';
DBdtCidade.Text:= 'REGISTROVAZIO';
DBCBoxEstado.Text:= '';
DBdtEndereco.Enabled:=False;
DBdtBairro.Enabled:=False;
DBdtCidade.Enabled:=False;
DBCBoxEstado.Enabled:=True;
DBdtTelRes.SetFocus;
end;
end;
DTM.XMLBuscaCEP.Active := False;
//comando PesquisaCep.
end;
|
|
|
| Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Sex Set 20, 2013 6:36 pm Assunto: |
|
|
O problema está no idHttp que em algumas situações solta exceção e voce consegue pegar no try/except
em alguns erros ele não solta execeção e dá o erro de dentro do componente. Ou voce troca de componente ou testa a conexão de internet (de outra foma) antes de tentar conectar pelo idHTTP
Qual versão de delphi voce usa ? |
|
| Voltar ao Topo |
|
 |
luciocampetti Aprendiz

Registrado: Domingo, 25 de Agosto de 2013 Mensagens: 128 Localização: Passo Fundo - RS
|
Enviada: Sex Set 20, 2013 8:44 pm Assunto: |
|
|
| claudio.ferreira escreveu: | O problema está no idHttp que em algumas situações solta exceção e voce consegue pegar no try/except
em alguns erros ele não solta execeção e dá o erro de dentro do componente. Ou voce troca de componente ou testa a conexão de internet (de outra foma) antes de tentar conectar pelo idHTTP
Qual versão de delphi voce usa ? |
Estou usando a delphi 7 e firebird 2.5 |
|
| Voltar ao Topo |
|
 |
didonsom Novato

Registrado: Quarta-Feira, 24 de Abril de 2013 Mensagens: 87
|
Enviada: Sáb Set 21, 2013 4:21 pm Assunto: |
|
|
olá amigo,
tente dessa a exceção dessa forma.. talvez tenha que adaptar aqui utilizo o delphi 2010
try
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
except
On Exc:Exception do
begin
ShowMessage('Erro ao conectar ao Serviço de Busca de Endereços, se o problema persistir Contate o Administrador');
abort;
end;
end;
compile e execute a aplicação fora do delphi para ver se não exibe o erro..
abraços, |
|
| Voltar ao Topo |
|
 |
luciocampetti Aprendiz

Registrado: Domingo, 25 de Agosto de 2013 Mensagens: 128 Localização: Passo Fundo - RS
|
Enviada: Sáb Set 21, 2013 6:03 pm Assunto: |
|
|
Boa tarde,
Fiiz desta mamaneira mas ainda aparece a mensagem de error socket 11004 e a mensagem da exception não aparece.
Existe alguma outra maneira que possa fazer?
| Código: |
procedure TFrmCadastro.BtnBuscaCepClick(Sender: TObject);
// Programa de Consulta CEP.
// Nome do Programa: WebSvrCEP.
// Power by: Johnny Walker.
// email: johnny-walker@ig.com.br.
// Data: 01-06-2008.
// Licença: pública.
// Localização: Contagem/MG - Brazil.
// A quem utilizar favor manter os créditos acima.
// Logo acima de Implementation.
// Declarar na secao var: TSConsulta: TStringList;
var
Consulta: String;
Resposta: TStringStream;
begin
if (DBdtCep.Text = '') or (Length(DBdtCep.Text) <8> 8) then
begin
beep;
Application.MessageBox('Cep nulo ou inválido.'+#13+'Digite somente números.', 'Pesquisar Cep', MB_ICONINFORMATION+mb_ok);
exit; //Se Campo Cep estiver vazio ou receber menos de 8 digitos
end; //ou receber mais de 8 digitos apresente a mensagem abaixo.
//RichEdit1.Clear;
Resposta := TStringStream.Create('');
TSConsulta := TStringList.Create;
DTM.IdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV2';
TSConsulta.Values['&cep'] := DBdtCep.Text;
TSConsulta.Values['&formato'] := 'xml';
//TSConsulta.Values['&formato'] := 'query_string';
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
DTM.XMLBuscaCEP.Active := True;
try
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
Except
on Exc:Exception do
begin
ShowMessage ('Problemas na conexão');
abort;
end;
end;
DTM.XMLBuscaCEP.Encoding := 'iso-8859-1';
DTM.XMLBuscaCEP.LoadFromStream(Resposta);
try
try
DBdtEndereco.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['tipo_logradouro'].NodeValue+' '+DTM.XMLBuscaCEP.DocumentElement.ChildNodes['logradouro'].NodeValue;
DBdtBairro.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['bairro'].NodeValue;
DBdtCidade.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['cidade'].NodeValue;//+', '+DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
//DBdtEstado.Text := DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
//DBCBoxEstado.Text:= DTM.XMLBuscaCEP.DocumentElement.ChildNodes['uf'].NodeValue;
finally
TSConsulta.Free;
Resposta.Free;
end;
except
//ShowMessage('Erro!! Cep inexistente. Mensagem de Origem:'+DTM.XMLBuscaCep.DocumentElement.ChildNodes['resultado_txt'].NodeValue);
Application.MessageBox('Cep nulo ou inválido.'+#13+'Digite somente números.', 'Pesquisa Cep', MB_ICONINFORMATION+MB_Ok);
//Exit;
//Abort;
//
//Codigo para mostrar mensagem caso o usuario digite
//um Cep nao valido (exemplo: 87453298, 00000000, neste
//caso, aparece uma mensagem para o mesmo perguntando se
//ele quer preencher os campos de forma manual.
//
if messagebox(Handle,'Deseja preencher os campos'#13'Cep, Endereço, Bairro e '#13'Cidade de forma manual?','Pesquisa Cep',mb_yesno+MB_ICONINFORMATION)= idyes then
begin //Sim desejo preencher manualmente.
GroupBox1.Enabled:= True;
//Habilitar Campos
DBdtEndereco.Enabled:=true;
DBdtBairro.Enabled:=true;
DBdtCidade.Enabled:=true;
DBCBoxEstado.Enabled:=true;
DBdtCep.SetFocus; //setar foco campo
//habilitar campos
DBdtEndereco.ReadOnly:= False;
DBdtBairro.ReadOnly:= False;
DBdtCidade.ReadOnly:= False;
DBCBoxEstado.Enabled:= True;
//habilitar escrita
end
else
begin //Nao, pular esta parte.
GroupBox1.Enabled:= True;
//Habilitar Campos
DBdtEndereco.Text:= 'REGISTROVAZIO';
DBdtNumero.Text:= '00';
DBdtComplemento.Text:= 'REGISTROVAZIO';
DBdtBairro.Text:= 'REGISTROVAZIO';
DBdtCidade.Text:= 'REGISTROVAZIO';
DBCBoxEstado.Text:= '';
DBdtEndereco.Enabled:=False;
DBdtBairro.Enabled:=False;
DBdtCidade.Enabled:=False;
DBCBoxEstado.Enabled:=True;
DBdtTelRes.SetFocus;
end;
end;
DTM.XMLBuscaCEP.Active := False;
//comando PesquisaCep.
end;
|
|
|
| Voltar ao Topo |
|
 |
didonsom Novato

Registrado: Quarta-Feira, 24 de Abril de 2013 Mensagens: 87
|
Enviada: Sáb Set 21, 2013 6:18 pm Assunto: |
|
|
olá amigo,
nessa parte do código,
| Código: |
//TSConsulta.Values['&formato'] := 'query_string';
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
DTM.XMLBuscaCEP.Active := True;
try
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
Except
on Exc:Exception do
begin
ShowMessage ('Problemas na conexão');
abort;
end;
end;
DTM.XMLBuscaCEP.Encoding := 'iso-8859-1';
DTM.XMLBuscaCEP.LoadFromStream(Resposta);
try
|
tente fazer dessa forma
| Código: |
try
//TSConsulta.Values['&formato'] := 'query_string';
DTM.IdHTTP.Post('http://cep.republicavirtual.com.br/web_cep.php?', TSConsulta, Resposta);
DTM.XMLBuscaCEP.Active := True;
Except
on Exc:Exception do
begin
ShowMessage ('Problemas na conexão');
abort;
end;
end;
|
abraços,
diego |
|
| Voltar ao Topo |
|
 |
luciocampetti Aprendiz

Registrado: Domingo, 25 de Agosto de 2013 Mensagens: 128 Localização: Passo Fundo - RS
|
Enviada: Sáb Set 21, 2013 6:50 pm Assunto: |
|
|
| Continua aparecendo a mensagem de socket error 11004 e a mensagem de conexão com falha não aparece. |
|
| Voltar ao Topo |
|
 |
claudio.ferreira Profissional


Registrado: Quarta-Feira, 18 de Setembro de 2013 Mensagens: 667
|
Enviada: Dom Set 22, 2013 12:26 am Assunto: |
|
|
| É como falei, as vezes pega no except e as vezes não, depende do erro, da exceção. Tenta descobrir se está conectado antes do post. |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|