2011-01-09 15 views
0

Ich versuche this Performance tip für MS Access 2007-Datenbank mit ODBC-verknüpften Tabellen zu implementieren und zu testen.Persistente Verbindung zu verknüpften ODBC-Tabellen in Access 2007

Grundsätzlich erstellt es eine dauerhafte Verbindung mit der verknüpften Datenbank. Das Beispiel verwendet eine andere Access-Datei (.mdb).

In meinem Fall verwende ich verknüpfte Tabellen von SQL Server mit einer Datei dsn. Während ich einen Benutzer-/System-DSN verwenden möchte, muss ich zunächst mit der Datei DSN arbeiten. Ich habe Probleme, eine Verbindung über die Datei DSN und die OpenDatabase-Methode zu erhalten.

Frage: Wenn ich nur eine der Tabellen über Recordset öffne und das offen halte, werden die gleichen Vorteile gesehen?

-Code in Beispiel:

Static dbsOpen As DAO.Database 
Set dbsOpen(x) = OpenDatabase("H:\folder\Backend1.mdb") 

Recordset basierend auf CurrentDB:

Static rs As DAO.Recordset 
Set rs = CurrentDb.OpenRecordset("tablename") 

Antwort

1

Die Leistung profitiert von einer persistenten Verbindung in Access gewonnen werden gilt nur für einen Jet/ACE-Backend, das heißt MDB/ACCDB, da der Grund für die Leistungssteigerung darin liegt, dass die Sperrdatei beim Öffnen der Verbindung erstellt wird und so lange besteht, wie die Verbindung geöffnet ist. Der Aufwand für das Erstellen/Sperren der LDB-Datei ist ziemlich hoch, und das ist es, was Sie vermeiden, d. H. Es nur einmal tun, anstatt es jedes Mal neu zu schreiben, wenn Sie auf Daten zugreifen.

Also, da es eine Datenbank-Engine-spezifische Optimierung ist, wird es überhaupt mit einer ODBC-Datenquelle wirken, es sei denn, diese Datenbank verwendet auch Sperrdateien (wie Jet/ACE).

+0

Also denkst du, mit einer ODBC-Verbindung hätte dies negative Auswirkungen oder neutral? Würde es Auswirkungen auf das Connection Pooling haben? –

+0

Es wird nicht sehr positiv sein und könnte schädlich sein, da der SQL Server diese Verbindung offen hält, was Ressourcen an diesem Ende verbraucht. Der allgemeine Rat lautet: Wenn Sie nicht in naher Zukunft (<1 Sekunde) dieselbe Verbindung verwenden, sollten Sie sie schließen. –

+0

Ich bin mir nicht sicher, dass es ein Problem ist, Kevin. Es hängt wirklich davon ab, ob Jet/ACE Verbindungen bündelt oder nicht. Ich denke auch, dass die meisten Server eine Verbindung nach Inaktivität schließen, egal ob Ihre App sie schließt oder nicht, sodass Sie den Vorteil haben, die Verbindung zu schließen, ohne dass Sie dies im Code tun müssen. Ich kann mir nicht vorstellen, dass die Anzahl der Verbindungen ein Problem wäre, außer wenn Ihre Access-App auf hunderten von Desktops ausgeführt wird. Die meisten erweiterten Apps sind nicht in dieser Situation. In der Tat glaube ich nicht wirklich, dass es so viele Access-Apps in dieser Kategorie gibt. –