Hallo,
ich nutze eine .apd als FrontEnd und SQL 2012.
Habe zwei Anwendungen, die sich über eine OnTimer Eigenschaft aktualisieren.
Jetzt verliert die .adp ab und an die Verbindung zum Server, so wie es aussieht. Kommt ne Meldung in der Art. Was mit Connection lost, no connection... gerade nicht im Kopf.
Jetzt würde ich einfach gerne bei jedem Timer Event die Verbindung neu aufbauen lassen. Wie mache ich das?
Hoffe dadurch das in den Griff zu bekommen. Ursprünglich kommen die Fehler mit Sicherheit vom Netzwerk, aber das lässt sich so schnell nicht lösen :D
Danke und Grüße
Ich würde das ADOConnection.Disconnect Event auswerten.
Oder...:
IF ADOConnection.State <> adstateopen then VerbindungAufbauen
Zitat von: MrMojoRisin am Dezember 18, 2017, 12:00:09
Jetzt würde ich einfach gerne bei jedem Timer Event die Verbindung neu aufbauen lassen. Wie mache ich das?
Ganz schlechter Stil, mit dem Timer und Neuaufbau der Verbindung. Würdest Du das auch manuell machen, z.B. bei instabiler Internetverbindung Dir eine Eieruhr hinstellen und alle 5 Minuten die Verbindung neu aufbauen?!?
Lass genau eine ADODB.Connection zu, baue diese beim start des Clienst auf und prüfe vor jeder SQL-Transaktion und jeder Abfrage ob die Connection (noch) offen ist. Am besten via Function in der Art:
Ein Modul hat eine Connection.
Private conn as ADODB.Connection
Public Function getConnection() as ADODB.Connection
If conn is nothing then
VerbindungAufbauen
else if conn.State <> adStateOpen then
Verbindung Aufbauen
endif
getConnection = conn
End Function
Danke, das hilft weiter. Mir schon klar, dass das keine hübsche Lösung ist, allerdings ist das auch keine hübsche Anwendung ;)
Ne, quatsch, hast ja Recht. So was in der Art werde ich morgen mal schreiben, dann werden wir sehen, ob es besser wird.
Danke schon mal an euch.
Wie ist das eigentlich, wenn die Verbindung während einem Execute abreißt?
Löst dann die Connection umgehend ein Error Event aus, oder erst nach einem Timeout?
Zitat von: markus888 am Dezember 19, 2017, 09:07:31
Wie ist das eigentlich, wenn die Verbindung während einem Execute abreißt?
Löst dann die Connection umgehend ein Error Event aus, oder erst nach einem Timeout?
Bei DML-Kommandos auf einem Datenbankserver immer mit Transaktionen arbeiten. Die unscheinbaren Befehle beginTrans und commitTrans sorgen dafür, daß auch bei umfangreichen Updates nach dem Alles-oder-nichts Prinzip fortgeschrieben wird.
Ein paar Anmerkungen zu dem Thema.
- Die ursprüngliche Frage war explizit zu einer Access-ADP-Anwendung. In einer solchen ist es nach meiner Erfahrung nicht ganz so einfach die Haupt-Verbindung (CurrentProject.Connection) in eine eigene Property/Function zu kapseln.
- Meine eigenen, bisher eher oberflächlichen, Experimente mit den Events von ADO-Connections waren eher durchwachsen. Häufig wurden Events nicht gefeuert, die ich eigentlich erwartet hätte.
Das Thema betrifft mich bzw. einige meine Anwendungen auch, daher bin ich sehr interessiert am Ergebnis dieser Diskussion.
Zitat von: PhilS am Dezember 19, 2017, 13:15:05
Die ursprüngliche Frage war explizit zu einer Access-ADP-Anwendung. In einer solchen ist es nach meiner Erfahrung nicht ganz so einfach die Haupt-Verbindung (CurrentProject.Connection) in eine eigene Property/Function zu kapseln.
Wenn das so ist, dann helfen die obigen Hinweise wahrscheinlich nicht. Ich meine, daß dieses ADP so eine Art goldenen Käfig darstellt (ähnlich wie die Makros als Code-Ersatz).