2017-02-22 4 views
0

Ich habe eine Frage über die ADODB.connection.Wird eine ADODB-Verbindung geschlossen, wenn Excel geschlossen wird?

Ich verwende ADODB-Verbindung, um eine Verbindung zu Access in meiner Excel-Anwendung herzustellen. Muss ich die Verbindung manuell schließen oder wird sie automatisch geschlossen, wenn meine Excel-Anwendung geschlossen wird?

Wenn ich es manuell machen muss, wann und wo? Kann ich den Code im Workbook_BeforeClose-Ereignis schreiben? Ich öffne die Verbindung in dem Ereignis Workbook_Open, und das Verbindungsobjekt wird als eine globale Variable deklariert.

+1

Wenn Sie Excel schließen, wird das Verbindungsobjekt den Gültigkeitsbereich verlassen, es ist jedoch ratsam, es explizit in Ihrem Code zu schließen. –

+1

Mögliches Duplikat von [Wann sollte eine Excel VBA-Variable gelöscht oder auf Nothing gesetzt werden?] (Http://stackoverflow.com/q/19038350/11683) – GSerg

+0

Dies könnte für Sie interessant sein ... http://stackoverflow.com/fragen/3217014/how-to-sicher-speichern-verbindung-string-details-in-vba? noredirect = 1 & lq = 1 Ich verwende diese Methode, um eine Verbindung zu ADODB.Connection –

Antwort

-1

Ich glaube, wenn Sie nicht explizit die Verbindung schließen, wird die Verbindung offen bleiben, auch wenn Excel beendet.

Leider ist VBA nicht so intelligent, um jede Verbindung usw. zu schließen, wenn ein Objekt den Gültigkeitsbereich verlässt. Dennoch ist es die beste Vorgehensweise, jeden Stream und jede Verbindung zu schließen, wann immer Sie sie nicht mehr benötigen, und natürlich ist es beim Beenden/Schließen der Arbeitsmappe eine gute Idee, die Verbindung zu überprüfen ist offen, und wenn ja, schließen Sie es. Das macht Ihre Anwendung noch robuster und zuverlässiger.

Also was ich Ihnen vorschlage ist, dass Sie die Verbindung schließen, wann immer ein R/W-Vorgang durchgeführt wird. Lassen Sie nicht einfach eine Verbindung geöffnet, während die App im Leerlauf ist (was passiert, wenn Excel oder das System einfriert?). Halten Sie es also so lange offen, wie es benötigt wird, aber überprüfen Sie es im Workbook_BeforeClose Eventhandler.

+1

'Leider ist VBA nicht so intelligent, um jede Verbindung usw. zu schließen, wenn ein Objekt den Gültigkeitsbereich verlässt '- im Gegensatz dazu ist [genau das, was VBA tut] (http://stackoverflow.com/a/19038890/11683). – GSerg

+0

Danke :) Ich denke jetzt bin ich auf die Idee gekommen. – Guoliangcai

Verwandte Themen