Verständnishlärung ODBC-ODBCDirect

22/09/2008 - 15:53 von Josef Morlo | Report spam
Access XP, Win XP SP2

Hallo allerseits,

Ich habe zwei Möglichkeiten auf eine SQL Serverdatenbank zuzugreifen:

Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim tdf As DAO.TableDef

1.
Set wrk = DBEngine.Workspaces(0)
'Verbindung zur ODBC-Datenbank erstellen
Set db = wrk.OpenDatabase("", False, False, ConnString)


...
2.
Set db = currentDb
Set tdf = db.CreateTableDef("LocalTableName", dbAttachSavePWD, _
"RemoteTableName", ConnString)
db.TableDefs.Append tdf
db.TableDefs.Refresh

...

Beide Varianten funktionieren mit SQL Server 2000 und 2005

In der OH (zu .OpenDatabase) heißt es:

'Anmerkung Wenn Sie auf eine mit Microsoft Jet verbundene
ODBC-Datenquelle zugreifen, können Sie das Leistungsverhalten Ihrer
Anwendung verbessern, indem Sie ein Database-Objekt öffnen, das mit der
ODBC-Datenquelle verbunden ist, anstatt einzelne TableDef-Objekte mit
bestimmten Tabellen in der ODBC-Datenquelle zu verknüpfen.'

Damit ist wohl die erste Alternative gemeint. Ist das ODBCDirect
(mittlerweile ja "deprecated") oder ODBC?

Was ist das Differenzkriterium für ODBCDirekt (asynchron?, Stapel?,
Workspace?, ohne Einbindung?)

Danke und Gruß

Josef Morlo
 

Lesen sie die antworten

#1 Hannes Brunner
22/09/2008 - 18:17 | Warnen spam
Hallo Josef,

Josef Morlo schrieb:
Access XP, Win XP SP2

Hallo allerseits,

Ich habe zwei Möglichkeiten auf eine SQL Serverdatenbank zuzugreifen:

Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim tdf As DAO.TableDef

1.
Set wrk = DBEngine.Workspaces(0)
'Verbindung zur ODBC-Datenbank erstellen
Set db = wrk.OpenDatabase("", False, False, ConnString)


...
2.
Set db = currentDb
Set tdf = db.CreateTableDef("LocalTableName", dbAttachSavePWD, _
"RemoteTableName", ConnString)
db.TableDefs.Append tdf
db.TableDefs.Refresh

...

Beide Varianten funktionieren mit SQL Server 2000 und 2005

In der OH (zu .OpenDatabase) heißt es:

'Anmerkung Wenn Sie auf eine mit Microsoft Jet verbundene
ODBC-Datenquelle zugreifen, können Sie das Leistungsverhalten Ihrer
Anwendung verbessern, indem Sie ein Database-Objekt öffnen, das mit der
ODBC-Datenquelle verbunden ist, anstatt einzelne TableDef-Objekte mit
bestimmten Tabellen in der ODBC-Datenquelle zu verknüpfen.'



naja ich würde auf solche Aussagen nicht viel geben. Dieser Text taucht
z.B. im Wortlaut in der OH zu Access 97 auf, ist also mindestens 10
Jahre alt. Inzwischen hat sich ja doch so einiges veràndert ...
Allgemein gesehen ist die OH von Access eine schlechte
Informationsquelle. Zig mal umgestrickt und verschlimmbessert.

Damit ist wohl die erste Alternative gemeint. Ist das ODBCDirect
(mittlerweile ja "deprecated") oder ODBC?



Beide Varianten benutzen Jet/ODBC. Für ODBCDirect musst du einen eigenen
Workspace samt Connection öffnen, also etwas in der Art:

Dim wrk As DAO.Workspace
Dim con As DAO.Connection

Set wrk = CreateWorkspace("", "", "", dbUseODBC)
Set con = wrk.OpenConnection("", dbDriverNoPrompt, False, "ODBC;DSN=.")

Was ist das Differenzkriterium für ODBCDirekt (asynchron?, Stapel?,
Workspace?, ohne Einbindung?)



Mit ODBCDirect kann man unter Umgehung der Jet-Engine direkt auf den
Server zugreifen, beim SQL-Server also Befehle in TSQL-Syntax absetzen,
optional asynchron.

Tabellen Einbinden geht mit ODBCDirect nicht, da eben die Jet-Engine
nicht mit im Spiel ist.

Ich hab ODBCDirect sporadisch an Stellen verwendet an denen die
Jet-Engine scheitert, z.B. bei Massen-Updates oder zum Absetzen von
DDL-Befehlen (CREATE TABLE etc.).

Gruß
Hannes

Ähnliche fragen