next up previous contents
Next: Geschwindigkeitsvergleich Up: Erläuterungen zu Designentscheidungen Previous: Methoden oder Prozeduren

Iterator für Ergebniszeile

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:

 nnnnnn¯ 
Scanner = RECORD

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);

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:

 nnnnnn¯ 
PROCEDURE FindField (r: Row; name: ARRAY OF CHAR; VAR f: Field);

PROCEDURE FirstField (r: Row; VAR f: Field);

PROCEDURE NextField (VAR f: Field);

PROCEDURE PrevField (VAR f: Field);

Wie in der Prozedur ListAll in gif 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 gif).



Christoph Steindl
Thu Jul 24 14:37:19 MET DST 1997