Unterschiedliche Schreibweise bei der Öffnung einer Connection

04/09/2009 - 13:43 von Susann Markward | Report spam
Hallo,

worin liegt der Unterschied beider Schreibweisen? Oder was ist der
Unterschied zwischen ADO Connection-Objekt und ADO-DataControl?

ADO Connection-Objekt
,
|Set cnn= New ADODB.Connection
|With cnn
| .CursorLocation = adUseClient
| .Provider = "Microsoft.Jet.OLEDB.4.0" _
| .Properties("Data Source").value = Datei
| .Properties("Persist Security Info") = False
| .Properties("Jet OLEDB:Database Password").value = MyPassword
| .Open
|End With
`

ADO-DataControl
,
|Set cnn= New ADODB.Connection
|cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0" & _
| ";Persist Security Info=False" & _
| ";Jet OLEDB:Database Password=" & MyPassword & _
| ";Data Source=" & Datei
`

Was bedeutet dieses "Persist Security Info"? Dazu habe ich meiner OH
keine Hilfe gefunden.

Warum verhalten sich beiden Zugriffe anders? Ich habe mit der Einführung
der Passwort-geschützten Datenbanken viele Zugriffe umgestellt von
ADO-DataControl zu ADO Connection-Objekt. Dadurch bekomme ich mehr
Programmierfehler mit.
Ich habe bspw. vorher (also mit ADO-DataControl) in einer Tabelle einem
Feld (Format Text) eine Variable vom Typ Variant, welche leer war (also
der kein Wert zugewiesen war), zugewiesen. Da gab es keine Fehlermeldung.
Öffne ich die Connection nun mittels erster Schreibweise (also über das
ADO Connection-Object) bekomme ich die Fehlermeldung:

,-
|Err.number: -2147467259
|Err.Source: Microsoft JET Database Engine
|Err.Description: Feld 'x' darf keine Zeichenfolge der Lànge Null
| sein.
`-

Warum bringt er einmal eine Fehlermeldung und das andere Mal nicht?

MfG
Susann
 

Lesen sie die antworten

#1 Peter Götz
04/09/2009 - 16:07 | Warnen spam
Hallo Susann,

worin liegt der Unterschied beider Schreibweisen?
Oder was ist der Unterschied zwischen ADO
Connection-Objekt und ADO-DataControl?

ADO Connection-Objekt
,
|Set cnn= New ADODB.Connection
|With cnn
| .CursorLocation = adUseClient
| .Provider = "Microsoft.Jet.OLEDB.4.0" _
| .Properties("Data Source").value = Datei
| .Properties("Persist Security Info") = False



.Properties("Persist Securitiy Info") ist für die Jet-Engine
ohne Bedeutung (immer = False)

| .Properties("Jet OLEDB:Database Password").value = MyPassword
| .Open
|End With
`



Ein ADODB.Connection - Objekt beschreibt eine Verbindung
zu einer Datenbank.


ADO-DataControl
,
|Set cnn= New ADODB.Connection
|cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0" & _
| ";Persist Security Info=False" & _
| ";Jet OLEDB:Database Password=" & MyPassword & _
| ";Data Source=" & Datei
`



Das ADO-DataControl kapselt eine ADODB.Connection sowie
ein ADODB.Recordset.

Im Grunde ist dieses ADO-DataControl völlig überflüssig, da
sich ADODB.Connection und ADODB.Recordset wesentlich
einfacher und übersichtlicher via konkretem Code erstellen
lassen.


Was bedeutet dieses "Persist Security Info"?



Für die Jet-Engine (Microsoft.Jet.OLEDB.4.0") ist dies
ohne Bedeutung und immer = False.


Dazu habe ich meiner OH
keine Hilfe gefunden.



Siehe MSDN-Library
-> Suchbegriff: "ADO Provider Properties and Settings"


Warum verhalten sich beiden Zugriffe anders?



Was verhàlt sich wie, wo, wann anders?

Ein ADODB.Connectionobjekt ist kein "Zugriff", sondern
beschreibt lediglich, wie die Verbindung zu einer DB
herzustellen, bzw. hergestellt ist.

Ein ADO-DataControl kapselt eine ADODB.Connection
UND ein ADODB.Recordset. Der Zugriff erfolgt entsprechend
dem SQL-Statement, mit welchem das Recordset erstellt
wurde.


Ich habe mit der Einführung
der Passwort-geschützten Datenbanken viele Zugriffe umgestellt von
ADO-DataControl zu ADO Connection-Objekt. Dadurch bekomme ich mehr
Programmierfehler mit.
Ich habe bspw. vorher (also mit ADO-DataControl) in einer Tabelle einem
Feld (Format Text) eine Variable vom Typ Variant, welche leer war (also
der kein Wert zugewiesen war), zugewiesen. Da gab es keine Fehlermeldung.
Öffne ich die Connection nun mittels erster Schreibweise (also über das
ADO Connection-Object) bekomme ich die Fehlermeldung:

,-
|Err.number: -2147467259
|Err.Source: Microsoft JET Database Engine
|Err.Description: Feld 'x' darf keine Zeichenfolge der Lànge Null
| sein.
`-

Warum bringt er einmal eine Fehlermeldung und das andere Mal nicht?



s.oben:

ADODB.Connection und ADO-DataControl sind zwei völlig
verschiedene Objekte.

Für den Zugriff auf eine DB brauchst Du eine ADODB.Connection
UND einen ADODB.Command bzw. ein ADODB.Recordset.
Eine ADODB.Connection alleine genügt noch nicht um auf
irgendwelche Daten in der DB zuzugreifen. Dazu wird noch
zusàtzlich ein ADODB.Command oder ein ADODB.Recordset
benötigt.

Das ADO-DataControl stellt eine ADODB.Connection UND
ein Recordset zur Verfügung.

Es ist jedoch einfacher und wesentlich übersichtlicher
ADODB.Connection sowie ADODB.Recordsets bzw.
ADODB.Commands per konkretem Code zu erstellen.
Vergiss das ADO-DataControl, es ist völlig überflüssig
und zudem gibt es darin auch noch div. Bugs.

Wie Connections zu *.mdb und/oder SQL-Server-DB hergestellt
werden können siehst Du im Beispiel

www.gssg.de -> Visual Basic -> VBclassic
-> Datenbank -> ADO DemoMU 2002

im Klassenmodul clsGSADOData.cls.

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen