Hallo Sylvia,
für den Abbruch der Verbindung scheint dies die Lösung zu sein:
Code: Alles auswählen
GLOBAL boStop AS BOOLEAN
SUB Reconnect
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSQL_Command AS OBJECT
boStop = false
DO
WAIT 10000 'Zeitangabe in Millisekunden
oDatasource = thisDatabaseDocument.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
oSQL_Command = oConnection.createStatement()
oSQL_Command.executeQuery("SELECT NOW()")
LOOP WHILE boStop = false
END SUB
SUB StopConnect
boStop = true
END SUB
Diese Makrozeilen musst Du in Deine *.odb-Datei einbauen und dann "Reconnect" mit dem Öffnen des Dokumentes verbinden (S. 442 Handbuch Base). Die Timerzeit ist auf 10 Sekunden eingestellt. Ich finde das eigentlich eine zu schnelle Wiederholung, aber vorherige Tests mit 50 Sekunden haben bei mir zwischendurch zu Abbrüchen geführt. Bei der Zeitangabe WAIT kannst Du ja entsprechend experimentieren.
Es kann natürlich sein, dass Du nach 10 Sekunden noch gar nicht den ersten Kontakt zur Datenbank hergestellt hast. Dann müsstest Du das Makro irgendwann nach dem ersten Kontakt anschubsen.
Ich habe damit jetzt gut 20 Minuten lang ununterbrochenen Kontakt zu meiner Datenbank bei Host Europe mit dem direkten Treiber. Mit JDBC habe ich da nicht weiter probiert, da dort ja autoReconnect anspringt.
Das folgende Makro funktioniert dann, wenn das wait_timeout nicht von Serverseite aus so eingestellt ist, dass Du da keinen Zugriff drauf hast. Da ich das Timeout nicht beliebig hoch setzen wollte (Jörn schlug hier eine Stunde vor) sondern schon die Verbindung irgendwann sicher kappen würde, wenn die Datenbankdatei geschlossen ist, hier die Reconnect-Fassung mit 2 Minuten (120 Sekunden) Timeout und alle 100 Sekunden eine kurze Abfrage zur Auffrischung.
Code: Alles auswählen
SUB Reconnect
DIM oDatasource AS OBJECT
DIM oConnection AS OBJECT
DIM oSQL_Command AS OBJECT
oDatasource = thisDatabaseDocument.CurrentController
IF NOT (oDatasource.isConnected()) THEN oDatasource.connect()
oConnection = oDatasource.ActiveConnection()
oSQL_Command1 = oConnection.createStatement()
oSQL_Command1.executeUpdate("SET SESSION wait_timeout=120")
boStop = false
DO
WAIT 100000 'Zeitangabe in Millisekunden
oSQL_Command2 = oConnection.createStatement()
oSQL_Command2.executeQuery("SELECT NOW()")
LOOP WHILE boStop = false
END SUB
Gruß
Robert