Provider Microsoft.Jet.OLEDB.4.0 kann nicht auf Access 2002-2003 MDB zugreifen

13/11/2007 - 14:34 von Chris | Report spam
Moin,

nach langem habe ich mal wieder VB6 ausgegraben. Ich muss auf eine
Access-MDB zugreifen, was ich mit ADO (2.8 ist aktuell installiert und
referenziert) tue. Solange es eine Access-2000-MDB ist, geht das. Beim
Format Access 2002-2003 bekomme ich eine Fehlermeldung. Zunàchst war
es Fehlernummer 5 (falscher Parameter), nunmehr ist es "Unzulàssige
SQL-Anweisung; 'DELETE', 'INSERT', 'SELECT' oder 'UPDATE' erwartet.".

Offenbar habe ich den falschen Provider verwendet, aber ich habe keine
Hinweise gefunden, dass das so nicht geht. Der Code làuft wie gesagt
mit einer 2000er MDB einwandfrei durch.

Relevante Code-Ausschnitte:

Private cn As ADODB.Connection
Private rs As ADODB.Recordset

If cn Is Nothing Then
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open Fullpath
End With
End If

If rs Is Nothing Then
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Source = "USysVersion"
.Open ' --> Hier tritt der Fehler auf!
End With
End If


Hat jemand eine Idee, was ich anders machen kann?

Thx,

Chris
 

Lesen sie die antworten

#1 Peter Götz
13/11/2007 - 15:28 | Warnen spam
Hallo Chris,

nach langem habe ich mal wieder VB6 ausgegraben.
Ich muss auf eine Access-MDB zugreifen, was ich mit
ADO (2.8 ist aktuell installiert und referenziert) tue.
Solange es eine Access-2000-MDB ist, geht das.
Beim Format Access 2002-2003



.. geht es genauso.

bekomme ich eine Fehlermeldung.



Von wem bekommst Du eine Fehlermeldung?


Zunàchst war es Fehlernummer 5 (falscher Parameter),
nunmehr ist es "Unzulàssige SQL-Anweisung;
'DELETE', 'INSERT', 'SELECT' oder 'UPDATE' erwartet.".

Offenbar habe ich den falschen Provider verwendet,



Nein, für den Zugriff auf eine Jet-Datenbank (*.mdb) ist
der "Microsoft.Jet.OLEDB.4.0" schon der richtige.


aber ich habe keine Hinweise gefunden, dass
das so nicht geht. Der Code làuft wie gesagt
mit einer 2000er MDB einwandfrei durch.

Relevante Code-Ausschnitte:

Private cn As ADODB.Connection
Private rs As ADODB.Recordset

If cn Is Nothing Then
Set cn = New ADODB.Connection
With cn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open Fullpath



Wer oder was ist FullPath?

End With
End If



Öffne Deine Connection mal so:

Dim Cnn as ADODB.Connection
Dim Filename as String
Dim DBPwd as String

FileName = "H:\Verzeichnis\DB.mdb
DBPwd = "DatenbankKennwort"

Set Cnn = New ADODB.Connection

With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = Filename

If Len(DBPassword) > 0 Then
.Properties("Jet OLEDB:Database Password") = DBPwd
End If

If LockingMode <> 0 Then
' PageLocking (0) / RowLocking (1)
.Properties("Jet OLEDB:Database Locking Mode") = 1
End If

.CursorLocation = adUseClient
.Mode = adModeShareDenyNone

.Open
End With


If rs Is Nothing Then
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.CursorLocation = adUseServer



Warum CursorLocation = adUseServer?
Das ist reine Ressourcenverschwendung und nur
in extrem seltenen Fàllen wirklich notwendig.
Verwende
.CursorLocation = adUseClient


.CursorType = adOpenStatic



.CursorType = adOpenStatic nur zusammen mit
.CursorLocation = adUseClient

.LockType = adLockReadOnly
.Source = "USysVersion"



Wer oder was ist "USysVerson"

.Open ' --> Hier tritt der Fehler auf!
End With
End If

Hat jemand eine Idee, was ich anders machen kann?



Dein RS z.B. so öffnen:

Dim RS as ADODB.Recordset

Set RS = New ADODB.Recordset
With rs
Set .ActiveConnection = Cnn
.Source = "Select * From Tabelle"
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockReadOnly
.Open
End With


Mehr zum Thema findest Du unter

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

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

Ähnliche fragen