Results 1 to 4 of 4

Thread: Herstellen interbase-verbinding na backup

  1. #1
    Mindert Dusselaar
    Join Date
    Oct 2004
    Location
    Zuid westen van Drenthe
    Posts
    91

    Herstellen interbase-verbinding na backup

    Weet je ook een oplossing voor het volgende: Iedere avond maak ik een backup van mijn Interbase datbase, daarvoor doe ik shutdown van de database.
    Echter als er nog iemand is ingelogd en de volgende morgen verder wil gaan, dan krijgt hij uiteraard een foutmelding.
    Deze foutmelding kanik wel ondervangen echter ik krijg het niet voor elkaar om de verbinding met de database weer te herstellen.
    Ik kan wel via een ApplicationEventsException de status van de verbinding uitvragen.
    Op dit moment sluit ik de applicatie. Dit zou ook met een timer kunnen maar als tussentijds de verbinding is verbroken, dan wil ik deze ook kunnen herstellen.
    Delphi Code:
    1. if EO.ErrorCode = E_UNEXPECTED then
    2.     begin
    3.       try
    4.         if <TSQLConnection>.ConnectionState = (csStateClosed)
    5.         then begin
    6.           ShowMessage('Verbinding verbroken met de database. Applicatie wordt afgesloten!');
    7.           system.Halt;
    8.         end
    9.         else
    10.         if <TSQLConnection>.ConnectionState = (csStateOpen) (de database is inmiddels wel weer beschikbaar)
    11.         then begin
    12.        //Hier wil ik opnieuw verbinden. Echter <TSQLConnection>.close geeft stackoverflow.
    enig idee?
    Last edited by GolezTrol; 25-Dec-22 at 23:17.

  2. #2
    Quote Originally Posted by mindert View Post
    Op dit moment sluit ik de applicatie. Dit zou ook met een timer kunnen maar als tussentijds de verbinding is verbroken, dan wil ik deze ook kunnen herstellen.
    Je hebt op dat moment ook geen queries open staan? Want als dat zo is dan zul je die ook moeten herstellen.

    Geen idee welk component je gebruikt maar Firebird geeft echt een IB error wanneer de connectie verloren gaat. Ik geloof 335544741.

    Waarom doe je overigens een shutdown van de database? Dat is toch nergens voor nodig. Je doet toch geen copy van de database bestand? Want dat is niet de juiste manier om een backup te maken. Je kunt gewoon gbak of de api gebruiken om een backup te maken terwijl iedereen nog in het programma zit. Maar dat terzijde...

  3. #3
    Kan het zijn dat de stack overflow veroorzaakt wordt door dat tijdens het herstellen van de verbinding (r.12) er weer een "E_UNEXPECTED" optreedt?

    Misschien dat je ook iets kunt met het AfterDisconnect event, maar ik weet niet zeker of deze aangeroepen wordt als de verbinding niet netjes wordt afgesloten.

  4. #4
    Wat Luigi zegt. Wellicht dat het sluiten faalt omdat de verbinding inmiddels al is gesloten, of er iets ongeldig is geworden. In dat geval krijg je weer een nieuwe OnException, en ga je weer opnieuw proberen de boel te sluiten. Ad infinitum.

    Ik zou proberen:

    - Sluiten binnen try..except. Lukt het niet (exception), dan gewoon doorgaan met poging om te herstellen.
    - Dan openen binnen try..except. Lukt het niet (exception, of connected blijft false), dan is het heropenen gefaald. In dat geval kan je weinig anders doen dan je applicatie sluiten.
    Hoe dan ook moet je exceptions hier goed afvangen, of desnoods controleren of je niet al in de OnException handler zat, anders kan je inderdaad een oneindige recursie krijgen.

    Het is misschien nog mooier om de connection niet op je mainform of main datamodule te zetten, maar op een aparte datamodule waar je meerder instances van kunt hebben. Je kan dan de ene weggooien en een nieuwe maken. Het is dan wel zaak om alle queries en openstaande koppelingen naar je connection over te zetten op de nieuwe, en dat is wellicht niet triviaal. Maar beter vroeg dan laat. Ik weet uit ervaring dat het geen leuk klusje is om te refactoren als je applicatie inmiddels 20 jaar oud en 1 miljoen regels groot is
    1+1=b

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •