Bei Abfragen von Daten aus Tabellen muß für jede Spalte in der Ergebnismenge ein Feld für die Datenkommunikation angelegt werden. Das passiert automatisch beim Vorbereiten der SQL-Anweisung, stat.results enthält dann einen Zeiger auf die Ergebniszeile mit den entsprechenden Feldern oder NIL, wenn keine Ergebnisse zu erwarten sind. Über diese Felder kann man mit den Aufrufen FirstField(stat.results, field) und NextField(field) iterieren, bis field den Wert NIL hat. Jedes Feld der Ergebniszeile hat (wie die Parameterfelder) einen Namen. Dieser Name ist der Name der Spalte (wie in der selectList der SELECT-Anweisung oder bei der Tabellendefinition angegeben) und wird im folgenden Beispiel vor der zeilenweisen Ausgabe der eigentlichen Daten als Überschrift für jede Spalte der Ergebniszeile ausgegeben. Die Ergebniszeilen selber werden nacheinander mit Fetch ausgelesen und mit der Hilfsprozedur PutField ausgegeben.
VAR stat: SQL.Statement; field: SQL.Field;
BEGIN
stat := SQL.PrepareStatement(conn,
SQL.Execute(stat);
IF (stat.ret = SQL.Success)
Out.Ln; SQL.FirstField(stat.results, field);
WHILE field
Out.String(field.name); Out.Char(
SQL.NextField(field)
END ;
REPEAT
SQL.Fetch(stat);
IF stat.ret = SQL.Success THEN
Out.Ln;
SQL.FirstField(stat.results, field);
WHILE field
PutField(field); Out.Char(
SQL.NextField(field)
END
END
UNTIL stat.ret
END
END ListAll;
nnnnnnnnnnnn¯
PROCEDURE ListAll*;
"
SELECT * FROM Friends"
);
&
(stat.results #
NIL) THEN
#
NIL DO
" "
);
#
NIL DO
" "
);
#
SQL.Success