Verificar se Banco de Dados esta online antes de conectar
Crie uma aplicação que gravar o dados em formato xml
para posterio envio ao banco da dados firebird.
o problema é o seguinte que verificar se o banco esta on-line antes de tentar enviar.
como posso fazer ja tentei try
scConn.open //SQLConnection
except
showmessage('Servidor off-line');
exit;
end; a aplicação travar
para posterio envio ao banco da dados firebird.
o problema é o seguinte que verificar se o banco esta on-line antes de tentar enviar.
como posso fazer ja tentei try
scConn.open //SQLConnection
except
showmessage('Servidor off-line');
exit;
end; a aplicação travar
Paulo Barros.
Curtidas 0
Respostas
Perivaldo Martins
20/11/2009
Verificando com IF não lhe serveria?
Tente assim:
if SQLCon1.ConnectionState = csStateOpen then
ShowMessage('Conectado!')
else
ShowMessage('Não conectado!!')
Boa sorte e bons códigos!
Tente assim:
if SQLCon1.ConnectionState = csStateOpen then
ShowMessage('Conectado!')
else
ShowMessage('Não conectado!!')
Boa sorte e bons códigos!
GOSTEI 0
Paulo Barros.
20/11/2009
Valeu pela dica mais isto ai eu sei fazer.
Não estou querendo teste se o componente esta conectado não.
O se o servidor está disponivel, por exemplo, acontece alguma coisa com o servidor e ele é desligado.
Então a aplicação cliente daria pau porque o servidor não esta disponivel, então criei uma rotina pra gravar os dados em outro lugar até servidor do bd ficar disponivel. por isso tenho que saber quando ele esta desligado para não travar a maquina cliente. Entendeu.
GOSTEI 0
Adriano Silva
20/11/2009
Bom dia,
Pelo que eu entendi você quer saber se o server está no ar, é isso?
Caso seja isso o mais fácil é você dar um ping no servidor pelo IP (se for fixo) ou pelo host (se for dinâmico).
Abaixo segue a função:
function Ping: Boolean;
var
wsadt: wsadata;
HNDicmp: integer;
hndFile: integer;
Host: PHostEnt;
Destino: in_addr;
Retorno: integer;
ipHost: string;
IcmpCreateFile: function():integer; {$IFDEF WIN32} stdcall; {$ENDIF}
IcmpCloseHandle: procedure(var handle:integer);{$IFDEF WIN32} stdcall; {$ENDIF}
IcmpSendEcho: function(var handle:integer; endereco:DWORD; buffer:variant; tam:WORD; IP:IPINFO; ICMP:ICMPECHO; tamicmp:DWORD; tempo:DWORD):DWORD;{$IFDEF WIN32} stdcall; {$ENDIF}
begin
Result := False;
//coloca o ip do servidor
ipHost := '192.168.0.1';
HNDicmp := LoadLibrary('ICMP.DLL');
if (HNDicmp <> 0) then
begin
@IcmpCreateFile := GetProcAddress(HNDicmp,'IcmpCreateFile');
@IcmpCloseHandle := GetProcAddress(HNDicmp,'IcmpCloseHandle');
@IcmpSendEcho := GetProcAddress(HNDicmp,'IcmpSendEcho');
if (@IcmpCreateFile=nil) or (@IcmpCloseHandle=nil) or (@IcmpSendEcho=nil) then
begin
FreeLibrary(HNDicmp);
end;
end;
Retorno := WSAStartup($0101,wsadt);
if (Retorno <> 0) then
begin
WSACleanup();
FreeLibrary(HNDicmp);
end
else
begin
Destino.S_addr := inet_addr(Pchar(ipHost));
if (Destino.S_addr = 0) then
Host := GetHostbyName(PChar(ipHost))
else
Host := GetHostbyAddr(@Destino,sizeof(in_addr), AF_INET);
Result := not (host = nil);
end;
FreeLibrary(HNDicmp);
WSACleanup();
end;
Eu uso essa função em um de meus sistemas para efetuar o ping.
Abraço...
GOSTEI 0
Fernando
20/11/2009
Amigo, acho que seria interessante criar uma procedure e nesta, vc poderia colocar um tratamento na hora que vc for fazer o commit, nessa hora, vc verifica se tudo ta ligado (online), se nao tiver, vc tenta reconectar até tudo se normalizar.
Acho que seria complicado vc salvar em outro local e depois salvar no banco. Isso envolve muitas outras coisas... A não ser que o projeto tenha sido preparado para isso ou que vc está planejando isso desde o inicio.
Fernando Medeiros
http://fernandomedeiros.com.br/blog
Acho que seria complicado vc salvar em outro local e depois salvar no banco. Isso envolve muitas outras coisas... A não ser que o projeto tenha sido preparado para isso ou que vc está planejando isso desde o inicio.
Fernando Medeiros
http://fernandomedeiros.com.br/blog
GOSTEI 0
Perivaldo Martins
20/11/2009
Desculpe pela dica anterior, não havia entendido a sua necessidade. Dando continuidade...
Tente trabalhar com ClientSocket, acho que o uso desse componente pode lhe ajudar já q vc quer saber o status do servidor, on/off, vc poderia tentar obter uma resposta pelo IP e Porta utilizada por exemplo por seu SGBD.
Boa sorte e bons códigos.
Tente trabalhar com ClientSocket, acho que o uso desse componente pode lhe ajudar já q vc quer saber o status do servidor, on/off, vc poderia tentar obter uma resposta pelo IP e Porta utilizada por exemplo por seu SGBD.
Boa sorte e bons códigos.
GOSTEI 0