Avatar billede skovjuul Nybegynder
03. april 2008 - 03:17 Der er 4 kommentarer og
1 løsning

Er der forbindelse til fil

Hola

Jeg har min databasefil liggende på en anden maskine i et lan. Mister mit program forbinelsen (database-maskinen mister lan-forbindelse) så hænger programmet. Hvordan kan jeg undgå det?

Jeg har prøvet med

if Database.connected then //den er stadig registreret som connected, så det duer ikke.

prøvede en meget længere smøre:

CONST
  INTERNET_CONNECTION_LAN        = 2;

type
  TfrmMain = class(TForm)
  //en masse
  private
    function IsConnectedToNetwork() : boolean;
  public
    { Public declarations }
  end;

  function InternetGetConnectedState(lpdwFlags: LPDWORD; dwReserved: DWORD): BOOL; stdcall; external 'WININET.DLL';

function TfrmMain.IsConnectedToNetwork() : boolean;
var
  dwConnectionTypes: Integer;
begin
  try
    dwConnectionTypes := INTERNET_CONNECTION_LAN;
    if InternetGetConnectedState(@dwConnectionTypes,0) then
      Result := true
    else
      Result := false;
  except
    Result := false;
  end;
end;


if IsConnectedToNetwork then //og det er jeg for min computer er stadig på LAN'et.

Andre gode måder at gøre det på?

På forhånd tak
Avatar billede hrc Mester
03. april 2008 - 06:59 #1
Er forbindelsen så dårlig at det er et problem?

De fleste databasekomponenter har en OnBeforeDisconnect (eller AfterDisconnect) event man måske kan bruge. Kommer man der før man selv vil det kan den måske håndteres.

... men ellers vil jeg tillade mig at kopiere ovenstående IsConnected løsning. Den kan sikkert bruges.
Avatar billede a_nor Nybegynder
03. april 2008 - 09:14 #2
Kunne forestille mig at du er nødt til at tjekke forbindelsen til din vært inden du laver request til databasen. Altså pinge den eller lign.

Fandt følgende som du måske kan bruge? IcmApi.zip på http://www.djernaes.dk/martin/vcl.html

eller http://www.dart.com/samp_ping.aspx ?
Avatar billede skovjuul Nybegynder
03. april 2008 - 09:18 #3
Næh, teoretisk set så burde der jo ikke være nogen problemer når det er over LAN, det var bare for at håndtere problemet inden det opstår :)

Men jeg vil da lige vise dig hele den ovenstående løsning for ja, den kan nok bruges i fremtiden :)

CONST
  INTERNET_CONNECTION_MODEM      = 1;
  INTERNET_CONNECTION_LAN        = 2;
  INTERNET_CONNECTION_PROXY      = 4;
  INTERNET_CONNECTION_MODEM_BUSY  = 8;


function TfrmMain.IsConnectedToNetwork() : boolean;
var
  dwConnectionTypes: Integer;
begin
  try
    dwConnectionTypes := INTERNET_CONNECTION_MODEM +
                        INTERNET_CONNECTION_LAN; //etc...
    if InternetGetConnectedState(@dwConnectionTypes,0) then
      Result := true
    else
      Result := false;
  except
    Result := false;
  end;
end;


Jeg har ikke testet om modem gælder adsl eller om der en fastnet type.

Men tak for hjælpen, smid et svar hvis du vil have pointene.
Avatar billede skovjuul Nybegynder
03. april 2008 - 09:41 #4
Tak a_nor, IcmpApi virker desværre ikke (som han også selv skriver på sin side) og jeg ville egentlig ikke bruge penge på en løsning, så vigtigt er det heller ikke. Men ellers en meget spændende side (dart).
Avatar billede skovjuul Nybegynder
05. april 2008 - 18:11 #5
Undskyld ulejligheden, men jeg holder mig til en mere simpel løsning:
if FileExists(RegBaseInfo.gsDBHost) then begin
//muuh
end
else
  raise exception.Create('Min Fejlbesked');
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester