Men er der noget man kan gøre i Delphi? F.eks. prøve at connecte igen? Eller kan man på en eller anden måde sende noget sql afsted der checker om man er connected og hvis ikke så manuelt connecte igen?
Jeg havde et lignende problem op mod en AS/400 (også via ODBC) hvor natkørslen gjorde at mit program mistede forbindelsen. Jeg løste det (quick-and-dirty) ved simplehen at lave en scheduler i mit program som automatisk lukkede forbindelsen om aftenen og startede den op igen om morgenen.
Har jeg forstået det korrekt, at dit program kører konstant (24/7) og at det en gang i døgnet gemmer nogle data i en DB - og at forbindelsen til DB\'en oprettes når dit program startes og nedlægges igen når programmet afsluttes?
Hvis dette er korrekt, så vil jeg anbefale: Opret forbindelse til DB\'en lige før data gemmes og nedlæg den igen når data er gemt. - det er usundt at stå med en åben forbindelse i (næsten) 24 timer i døgnet uden der sker aktivitet.
Vedr. dit problem:
Hvad med at lave en block med følgende kode:
Try Lav en eller anden DB action, fx. søg efter et eller anden banalt. Except // Her kommer man hvis ovenstående udløste en fejl, fx. mistet forbindelse
(Re-)Connect til DB serveren. Stop program, eller lign., hvis forbindelse ikke kan opnåes. End;
Lav her dine alm. DB actions.
Jeg ved godt at dette ikke løser dit egentlige problem, nemlig at du tilsyneladende mister din forbindelse. Dette er klart nok det problem der egentligt bør løses, men symptom behandling er vel bedere end ingen behandling....
Specifies whether an application remains connected to a database even if no datasets are open.
property KeepConnection: Boolean;
Description
Use KeepConnection to specify whether an application remains connected to a database even if no datasets are currently open. When KeepConnection is True (the default) the connection is maintained. For connections to remote database servers, or for applications that frequently open and close datasets, set KeepConnection to True to reduce network traffic, speed up applications, and avoid logging in to the server each time the connection is reestablished.
When KeepConnection is False a connection is dropped when there are no open datasets. Dropping a connection releases system resources allocated to the connection, but if a dataset is later opened that uses the database, the connection must be reestablished and initialized.
Note: The KeepConnection setting for temporary database components created automatically as needed is determined by the KeepConnections property of TSession.
Mit program skulle hver 5. minut kigge på noge (AS/500) data så jeg brugte i forvejen en timer der \"trigger\'ede\" en gang i minuttet for at se om det var blevet tid til at \"gøre noget\". I denne undersøgte jeg blot om det var tid til at lukke ned og i så fald så lukkede jeg \"bare\" den TDatabase der forbandt mig til AS/400\'ere, og når det igen var tid til at \"gå på\" så åbnede jeg igen forbindelse (som Delphi lige har vist ovenstående).
Har jeg forstået det korrekt, at dit program kører konstant (24/7) og at det en gang i døgnet gemmer nogle data i en DB - og at forbindelsen til DB\'en oprettes når dit program startes og nedlægges igen når programmet afsluttes?
Korrekt opfattet!
Jeg prøver lige forslaget fra pellelil/delphi og vender tilbage!
Mht. til KeepConnection synes jeg har prøvet med, men prøver lige at undersøge det igen. Systemet kan også godt køre flere dage i træk, men efter en 4 -6 dage har vi balladen.
Der findes en flok klienter, der benytter severens SQL-database direkte, men det er altid på serveren at forbindelsen mistes.
Jeg vil foreslå dig at slå KeepConn fra og så Connecte når du skal bruge det og disconnecte når du er færdig, så burde du ikke opleve nogle problemer, det eneste minus ved den løsning er Connect-tiden, men den er vel ikke så vigtig.
Jeg har nu prøvet at slå KeepConnection fra og åbne forbindelsen når jeg skal bruge databasen og lukke forbindelsen når jeg ikke skal bruge den mere.
Umiddelbart ser det ud til at virke, jeg vender tilbage i løbet af 4 - 6 dage . . .
Til martinlind: du har ret! Det tager selvfølgelig lidt længere tid at connecte hver gang end at holde forbindelsen åben, men det betyder ikke noget i det her tilfælde.
Ok.... Du har ret, jeg har vist bare lavet en stribe \'comments\'.
Men det er jo typisk pelle... sådan en point-hunter! ;)
Peter
Synes godt om
Ny brugerNybegynder
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.