Anmelden

View Full Version : iSeries Access ODBC Driver Recordset unvollständig



David_off
12-09-17, 13:22
Hallo Forum,

ich greife über iSeries Access ODBC Driver auf eine Datenbank zu. Aus der Tabelle TABTEST will ich erst Mal alle Sätze/ Alle Spalten ablesen (bevor ich Anfange mit WHERE zu suchen)
Die ODBC ist eingerichtet, Die Verbindung kommt zustande, das Recordset weist aber nur ein Record auf (erste Zeile der Tabelle, Inhalt ist korrekt), dabei hat die Tabelle ca. 600 Zeilen. Wo ist der Hund begraben?


----Sub SQL_Query()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
conn.Open "Driver={iSeries Access ODBC Driver};System=xxx.xxx.x.xx; Uid=xxxx;Pwd=xxxx;"
'MsgBox conn.State
rs.Open "SELECT * FROM QU.TABTEST AS TABTEST ", conn
Dim Anzahl
Anzahl = rs.RecordCount
----

Vilelen Dank im Vorau!

David

Fuerchau
12-09-17, 14:57
Das liegt am CursorType des Recordset's.
Der Default ist ServerCursor, so dass die Daten immer erst mit dem nächsten MoveNext gelesen werden.
Beim ClientCursor werden beim Open sämtliche Daten in das Recordset geladen, was dann auchschon mal dauern kann (wenn man gerade eine Tabelle mit Millionen von Sätzen erwischt).

Spätestens wenn du mit Where-Klauseln arbeitest, solltest du mit Command-Objekten und Parametern "?" arbeiten. Das ist am effektivsten.

David_off
13-09-17, 06:59
Vielen Dank!

Hast Du vlt für mich ein Beispiel mit der ClientCursor Definition?

Danke!

Fuerchau
13-09-17, 07:52
Kleine Ergänzung "CursorLocation".
Ganz einfach:
rs.CursorLocation = adUseClient
rs.Open ...

rs.RecordCount enthält dann die Anzahl geladener Sätze.

David_off
13-09-17, 08:11
Klasse! Funktioniert wie gewünscht!

Vielen Dank für schnelle und professionelle Hilfe!

David