Re: ConnectionString für Access-DB mit MSDataShape
From: Peter Götz (gssg_nospam_at_t-online.de)
Date: 02/17/04
- Next message: Karl Landner: "Eigenes Programm mit Datenbankzugriff entwickeln"
- Previous message: Peter Götz: "Re: WithEvents und ADODB.Connection"
- In reply to: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Next in thread: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Reply: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Reply: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Messages sorted by: [ date ] [ thread ]
Date: Tue, 17 Feb 2004 16:44:03 +0100
Hallo Michael,
> >>
> >>Fehler-Nr.: 3251 Hex: CB3
> >>Das aktuelle Recordset unterstützt keine Aktualisierung. Hierbei
> >>handelt es sich möglicherweise um eine Einschränkung seitens des
> >>Providers oder des gewählten LockTypes.
>
>
> > Michael,
> > Welchen LockType weist das Recordset-Objekt aus? Da steht garantiert
"Nur
> > Lesen" drin.
>
> Siehe weiter unten:
> .LockType = adLockOptimistic
Ob in RS.LockType auch wirklich adLockOptimistic oder vielleicht doch was
anderes drinsteht, solltes Du nach dem RS.Open prüfen. ADO schluckt nicht
jede Kombination von CursorLocation, CursorType und LockType. Bei einer
unzulässigen Kombination dieser Werte macht ADO oder was davon zu sagen aus
den unzulässigen Werten solche, die halbwegs sinnvoll sind. Ganz ohne
Kommentar und ohne Fehlermeldung. ADO ist da recht selbstbewusst.;-)
>
>
> > Der obige Fehler kommt, wenn du bestimmte Eigenschaften nicht oder
falsch
> > gesetzt hast. Das ist meist die Ursache einer unübersichtlichen
> > Programmierung, weshalb du die Ratschläge von Peter Götz befolgen
solltest.
> >
> > Weiterhin solltest du prüfen:
> >
> > Welchen Mode hat das Connection-Objekt?
> Muß ich nachschauen, kann ich aber erst heute abend machen.
>
>
> > Hat die Access-Datei Schreibzugriff?
> Nein. Definitiv nicht.
Wie soll man das verstehen?
Ist für diese *.mdb das Attribut ReadOnly gesetzt?
Dann kannst Du natürlich keine Daten in dieser *.mdb ändern.
>
> > Hat dein Nutzer Schreibzugriff?
> Definitiv ja.
>
> > Haben deine Selects und Subselects JOIN-Klauseln?
> Ja, haben sie.
Das mit einem solchen SQL-Statement erzeugte Recordset kann sehr wohl eines
sein, das nicht "Updatable" ist.
>
>
> >>Wenn ich die Anleitung von Peter Götz befolge:
> >>
> >>Set Cn = New ADODB.Connection
> >>With Cn
> >> .Provider = "MSDataShape"
> >> .CursorLocation = adUseClient
> >> .Mode = adModeShareDenyNone
> >> .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
> >> .Properties("Data Source").Value = strDBName
> >> .Open
> >>End With
> >>
> >>(unabhängig, ob ich die Zeile "CursorLocation = adUseClient" drinlasse
>
>
> >Diese Zeile ist schon in Ordnung, die musst Du nicht rausnehmen.
>
> Aber als ich sie bei den ersten Versuchen drinließ, bekam ich ebenfalls
> eine Fehlermeldung (siehe OP).
Bei was für einem Versuch?
> Erst als ich sie entfernte, funktionierte
> es (wie ja auch von Peter Fleischer in seiner Antwort auf mein OP
> empfohlen).
Er hat Dir empfohlen das aus dem Connectionstring herauszunehmen.
Es gibt schon Unterschiede zwischen der Methode eine Connection mit einem
vollgepackten Connectionstring zu öffnen und der Methode dieses durch
explizites Zuweisung der Werte an die einzelnen Eigenschaften zu machen.
Deswegen ja auch mein Rat, Connections nicht mit einem kaum debugbaren und
meist auch sehr schlecht lesbaren Connectionstring zu öffnen, sondern lieber
die einzelnen Eigenschaften des Connectionobjektes per konkretem Code mit
sinnvollen Werten versorgen.
>
> >>oder entferne lautet die Fehlermeldung beim Speichern eines
> >>Datensatzes:
> >>
> >>Fehler-Nr.: 3709 Hex: E7D
> >>Die Verbindung kann nicht verwendet werden, um diesen Vorgang
> >>auszuführen. Sie ist entweder geschlossen oder in diesem Zusammenhang
> >>ungültig.
>
>
> > Dieser Fehler kommt, wenn beim Öffnen des Recordset-Objektes auf kein
> > gültiges oder kein geöffnetes Connection-Objekt verwiesen wurde. Wie
sieht
> > denn der Zeiger auf das Connection-Objket aus? Wie sieht das
> > Connection-Objekt aus, auf welches verwiesen wurde? Hast du das mal
debuggt?
>
> Nein, noch nicht. Mit aus dem Grund, wenn ich das Connectionobjekt ohne
> den MSDataShape-Provider öffne, sprich den Jet40-Treiber verwende, gibt
> es keinerlei Probleme. Aber das werde ich heute abend nachprüfen.
Du brachst eigentlich nur die Objektvariable welches den Verweis auf Deine
Connectionobjekt hält ins Überwachungsfenster stellen. Dann lässt Du Deinen
Code bis nach Cnn.Open laufen und danach anhalten.
Nun kannst Du Dir im Überwachungsfenster sämtliche Eigenschaften mit ihren
tatsächlichen Werten ansehen.
Genauso kannst Du mit Deinem Recordset verfahren.
Es dürfte eigentlich nur eine Sache von Sekunden sein, festzustellen, woran
es hakt, sprich welche der Eigenschaften einen unpassenden Wert hat.
> >>So ist das RS deklariert:
> >>
> >>With rs
> >> Set .ActiveConnection = cn
> >> .CursorLocation = adUseClient
> >> .CursorType = adOpenStatic
> >> .LockType = adLockOptimistic
> >> .Source = strSource
Der wahre Inhalt von strSource könnte möglicherweise schon Aufschluss
darüber geben, warum Dein Recordset nicht "Updatable" ist.
> >> .Open
> >>End With 'rs
> >>
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tips u. Beispielprogrammen)
- Next message: Karl Landner: "Eigenes Programm mit Datenbankzugriff entwickeln"
- Previous message: Peter Götz: "Re: WithEvents und ADODB.Connection"
- In reply to: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Next in thread: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Reply: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Reply: Michael Bayer: "Re: ConnectionString für Access-DB mit MSDataShape"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|