PDA

View Full Version : ADO/OLE DB



Sven Schneider
29-06-04, 18:23
Folgendes Problem :

einem ADO-recordset kann ich u.a. folgende properties zuweisen :



Set rsSql = CreateObject("ADODB.Recordset")

rsSql.CursorType = adOpenDynamic
rsSql.CursorLocation = adUseServer
rsSql.LockType = adLockReadOnly



Weiter im Code :



Set cn400 = CreateObject("ADODB.Connection")
Set cmSql = CreateObject("ADODB.Command")

cn400.Provider = "IBMDA400"
cn400.Properties("data source") = "MyServer"
cn400.Open
Set cmSql.ActiveConnection = cn400
cmSql.CommandText = "SELECT * FROM QIWS.QCUSTCDT "
cmSql.CommandType = adCmdText
cmSql.Prepared = True


Wen ich dieses recordset implizit mit der excute Methode eines Command Objekts öffne, werden die properties ignoriert :


Set rsSql = cmSql.Execute '!!!! properties werden nicht berücksichtigt


Öffne ich diese recordset explizit, werden die properties, wie gewünscht, berücksichtigt :


rsSql.Open = cmSql 'properties werden berücksichtigt


Wer kann mir eine Begründung liefern warum.

Hintergund der ganzen Geschichte :
mit der Execude-Methode wird im default nur ein forwardonly-Recordset erstellt, d.h. die recordset-Methoden movefirst bzw. moveprevious funktionieren nicht.

Vielen Dank
Sven

Fuerchau
29-06-04, 19:10
Mit "set rsSql = " wird ein neues Recordset erstellt (nämlich vom Command) und das vorherige verworfen !

Mit der Execute-Methode können im 3. Parameter entsprechende Optionen angegeben werden:
Set rsSql = cmSql.Execute(,,adOpenKeyset)

Microsoft hat absichtlich die Methoden so getrennt, dass man das nützlichste heraussuchen kann.
Im Recordset.Open() kann ja auch ein Command-Objekt angegeben werden. Dies eignet sich nur nicht für Command's mit Parametern "select ... where key=?".

Schau in der Hilfedatei zu ADO nach.

Sven Schneider
29-06-04, 19:30
Wie immer :
Wer lesen kann ist im Vorteil !

Online Hilfe zur ADO-Methode execute in Excel :


Das zurückgegebene Recordset-Objekt ist immer ein schreibgeschützter Cursor vom Typ Vorwärts. Wenn Sie ein Recordset-Objekt mit einer größeren Anzahl an Funktionen benötigen, erstellen Sie zunächst ein Recordset-Objekt mit den gewünschten Eigenschaftseinstellungen. Verwenden Sie anschließend die Open-Methode des Recordset-Objekts, um die Abfrage auszuführen und den gewünschten Cursortyp zurückzugeben.

Trotzdem Danke!
Sven