/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
TDatabase open/close
Fra : Henrik Ankersen


Dato : 28-09-01 10:56

Hej

Jeg har lidt problemer med at åbne og lukke forbindelsen til et TDatabase
komponent, der er koblet på en Access DB.

procedure TFwebadm.Button8Click(Sender: TObject);
var
indstillinger: Tindstillinger;
begin
HISDB.connected := false; //Her skulle den lukke forbindelse.
AssignFile(indfil, filnavn);
try
reset(indfil);
Read(indfil, indstillinger);
FTP.Host := indstillinger.host;
FTP.Port := 21;
FTP.TimeOut := 0;
FTP.UserID := indstillinger.userid;
FTP.Password := indstillinger.passw;
FTP.Connect;
FTP.ChangeDir(indstillinger.subdir);
FTP.Upload(indstillinger.upsti , 'his.mdb');
FTP.Disconnect;
finally
CloseFile(indfil);
end;
HISDB.connected := true; //Her skulle den åbne forbindelse.
end;

Jeg har også prøvet med HISDB.open og HISDB.close, men det virker heler ikke


Hvad gør jeg ????

Hilsen HA



 
 
R. A. Larsen (28-09-2001)
Kommentar
Fra : R. A. Larsen


Dato : 28-09-01 22:43

"Henrik Ankersen" <henrik.ankersen@get2net.dk> wrote:
>
> Hej
>
> Jeg har lidt problemer med at åbne og lukke forbindelsen til et TDatabase
> komponent, der er koblet på en Access DB.
>
> procedure TFwebadm.Button8Click(Sender: TObject);
> var
> indstillinger: Tindstillinger;
> begin
> HISDB.connected := false; //Her skulle den lukke forbindelse.
> AssignFile(indfil, filnavn);
> try
> reset(indfil);
[*****kode klippet væk*****]
> finally
> CloseFile(indfil);
> end;
> HISDB.connected := true; //Her skulle den åbne forbindelse.
> end;
>
> Jeg har også prøvet med HISDB.open og HISDB.close, men det virker heler ikke
>

Dit problem er følgende:
Hvad sker der, hvis der opstår en exception inde i try/finally-blokken? Jeg er
ikke 100% sikker, men SVJV er du *ikke* garanteret, at kode _efter_ en
finally/end udføres, hvis der forekommer en exception.

> Hvad gør jeg ????

Du sætter en try/finally inden i en try/finally!

Her er dit eksempel lettere omskrevet og forkortet:

procedure TFwebadm.Button8Click(Sender: TObject);
var
indstillinger: Tindstillinger;
begin
HISDB.connected := false; //Her skulle den lukke forbindelse.
try
AssignFile(indfil, filnavn);
Reset(indfil);
try
Read(indfil, indstillinger);
// Her kommer resten...

finally
CloseFile(indfil);
end;

finally
HISDB.connected := true; //Her skulle den åbne forbindelse.
end;
end;


Bemærk at det kun er hvis filen bliver åbnet ("Reset()" lykkes), at den skal
lukkes igen ("CloseFile()"). Hvis "Reset()" fejler, er der ikke nogen fil at
lukke.

Det du skal tænke på, når du bruger try/finally, er, at det er kommandoen lige
_før_ "try", der hører til blokken mellem "finally" og "end".

Når du derimod bruger try/except, er det kommandoerne _mellem_ "try" og
"except", der hører til blokken mellem "except" og "end".

Eksempler:

OldBool := Bool
try
Bool := False;
// Her kommer resten...
finally
// Bool får nu den gamle værdi igen...
Bool := OldBool;
end;

try
tal := StrToFloat(s);
except
// Behandling af fejl:...
ShowMessage('"StrToFloat()" fejlede');
end;

Håber det hjalp.

MVH, René
--
Using Virtual Access
http://www.vamail.com


Anders Holm Jensen (28-09-2001)
Kommentar
Fra : Anders Holm Jensen


Dato : 28-09-01 23:28

Hej tak for svaret !

Jeg har prøvet med det du foreslog, men det virker ikke helt efter planen.

Det der er problemet er at jeg ikke får lukket adgangen til databasen ned,
også kan jeg ikke flytte den med FTP komponenten.

Men det er noget med filen og try blokken, for når jeg angiver FTP
egenskaber uden at tag det fra en fil, virker det fint , men så er
programmet ikke så dynamisk !

Hilsen AHJ

"R. A. Larsen" <r_larsen@image.dk> skrev i en meddelelse
news:VA.00000120.010378df@r_larsen...
> "Henrik Ankersen" <henrik.ankersen@get2net.dk> wrote:
> >
> > Hej
> >
> > Jeg har lidt problemer med at åbne og lukke forbindelsen til et
TDatabase
> > komponent, der er koblet på en Access DB.
> >
> > procedure TFwebadm.Button8Click(Sender: TObject);
> > var
> > indstillinger: Tindstillinger;
> > begin
> > HISDB.connected := false; //Her skulle den lukke forbindelse.
> > AssignFile(indfil, filnavn);
> > try
> > reset(indfil);
> [*****kode klippet væk*****]
> > finally
> > CloseFile(indfil);
> > end;
> > HISDB.connected := true; //Her skulle den åbne forbindelse.
> > end;
> >
> > Jeg har også prøvet med HISDB.open og HISDB.close, men det virker heler
ikke
> >
>
> Dit problem er følgende:
> Hvad sker der, hvis der opstår en exception inde i try/finally-blokken?
Jeg er
> ikke 100% sikker, men SVJV er du *ikke* garanteret, at kode _efter_ en
> finally/end udføres, hvis der forekommer en exception.
>
> > Hvad gør jeg ????
>
> Du sætter en try/finally inden i en try/finally!
>
> Her er dit eksempel lettere omskrevet og forkortet:
>
> procedure TFwebadm.Button8Click(Sender: TObject);
> var
> indstillinger: Tindstillinger;
> begin
> HISDB.connected := false; //Her skulle den lukke forbindelse.
> try
> AssignFile(indfil, filnavn);
> Reset(indfil);
> try
> Read(indfil, indstillinger);
> // Her kommer resten...
>
> finally
> CloseFile(indfil);
> end;
>
> finally
> HISDB.connected := true; //Her skulle den åbne forbindelse.
> end;
> end;
>
>
> Bemærk at det kun er hvis filen bliver åbnet ("Reset()" lykkes), at den
skal
> lukkes igen ("CloseFile()"). Hvis "Reset()" fejler, er der ikke nogen fil
at
> lukke.
>
> Det du skal tænke på, når du bruger try/finally, er, at det er kommandoen
lige
> _før_ "try", der hører til blokken mellem "finally" og "end".
>
> Når du derimod bruger try/except, er det kommandoerne _mellem_ "try" og
> "except", der hører til blokken mellem "except" og "end".
>
> Eksempler:
>
> OldBool := Bool
> try
> Bool := False;
> // Her kommer resten...
> finally
> // Bool får nu den gamle værdi igen...
> Bool := OldBool;
> end;
>
> try
> tal := StrToFloat(s);
> except
> // Behandling af fejl:...
> ShowMessage('"StrToFloat()" fejlede');
> end;
>
> Håber det hjalp.
>
> MVH, René
> --
> Using Virtual Access
> http://www.vamail.com
>



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste