Um die Werte einer Ergebniszeile verarbeiten zu können, muß man über die Ergebniszeile iterieren können. Anfangs war daran gedacht, dafür einen Scanner mit ungefähr folgender Schnittstelle zu definieren:
eor: BOOLEAN; (* end of row *)
colIdx: INTEGER;
sqlType: INTEGER;
b: BOOLEAN;
i: LONGINT;
r: LONGREAL;
str: ARRAY 256 OF CHAR;
ts: RECORD year, month, day, hour, minute, second: INTEGER;
fraction: LONGINT
END ;
f: Files.File
END ;
PROCEDURE OpenScanner (stat: Statement; VAR s: Scanner; colIdx: INTEGER);
PROCEDURE Scan (VAR s: Scanner);
nnnnnn¯
Scanner = RECORD
Nach dem Öffnen eines Scanners über der Spalte mit der Nummer colIdx kann man den Scanner mit Scan vorrücken, bis das Feld eor (end of row) TRUE ist. Abhängig vom Typ der Spalte ( sqlType) steht der eingelesene Wert in einem der Datenfelder.
Da aber mitunter wahlweiser Zugriff, beziehungsweise Zugriff über den Namen einer Spalte in der Ergebnismenge erwünscht ist, wurde der Ansatz der ODBC-Anbindung für Oberon System 3 von Markus Dätwyler verwendet:
PROCEDURE FirstField (r: Row; VAR f: Field);
PROCEDURE NextField (VAR f: Field);
PROCEDURE PrevField (VAR f: Field);
nnnnnn¯
PROCEDURE FindField (r: Row; name: ARRAY OF CHAR; VAR f: Field);
Wie in der Prozedur ListAll in gezeigt, kann man über die Felder einer Ergebniszeile iterieren. Mit Typtests und Typzusicherungen kann man auf die einzelnen Datenfelder der Recorderweiterungen zugreifen (siehe PutField in ODBCBench im Anhang ).