SQL_Cursor
lk
Owned by lk
Erzeugt einen Datenbank-Cursor, über den Datensätze gelesen werden können.
Prototype
SQL_Cursor( query )
Parameter
Parameter | Typ | Bedeutung |
---|---|---|
query | string | Select-Statement |
Rückgabewert
Nummer | Typ | Bedeutung |
---|---|---|
1 | userdata/nil | Ein Cursor-Objekt oder 'nil', wenn das übergebene Select-Statement fehlerhaft ist. |
2 | string | Nur im Fehlerfall: Fehlermeldung der Datenbank. |
Methode fetch
Liest den nächsten Datensatz.
Prototyp
fetch( [table[, modus]] )
Parameter
Parameter | Typ | Bedeutung |
---|---|---|
table | table | optional: table, in den die von der Datenbank gelesenen Felder reingeschrieben werden. Wird keiner übergeben, werden alle Felder der Reihe nach zurückgegeben (siehe auch Beispiel). |
modus | string | optional: "n" bedeutet, dass die als Ergebnis zurückgegebene Table numerische Indizes bekommt (1..n), "a" erzeugt alphanumerische Indizes (die Feldnamen aus der Datenbank). Wird der Parameter nicht übergeben, werden numerische Indizes zurückgegeben. |
Rückgabewerte
Nummer | Typ | Bedeutung |
---|---|---|
1 | string/number/bool/table | Je nach dem 1. Parameter der Methode ein Table mit den Ergebnissen, oder aber ein oder mehrere Rückgabewerte des entsprechenden Typs. |
Methode getcolnames
Liefert eine Liste der Feldnamen.
Prototyp
getcolnames()
Rückgabewerte
Nummer | Typ | Bedeutung |
---|---|---|
1 | table | table, der die einzelnen Feldnamen enthält. |
Methode close
Schließt den Cursor
Prototyp
close()
Beispiel
-- Vor-/Nachname und Geburtsdatum aller aktiven Mitarbeiter im Personalstamm... local query = "SELECT vname, nname, gebdat FROM gpktab WHERE finr = " .. SysLogFinr .. " AND status = 'A'" local cursor = assert( SQL_Cursor( query ) ) local vname, nname, gebdat = cursor:fetch() -- den ersten Datensatz lesen SY_Proto( vname, nname, gebdat ) -- und ins Protokoll ausgeben local res = cursor:fetch({}) -- nächsten Datensatz lesen, diesmal aber in einen table SY_Proto( res[1], res[2], res[3] ) -- ... und ausgeben res = cursor:fetch( res, "a" ) -- den nächsten Datensatz in den gleichen table wie eben einlesen (mit alphanumerischen Keys) SY_Proto( res.vname, res.nname, res.gebdat ) -- und ausgeben -- solange weiterfetchen und ausgeben, bis nix mehr kommt while res do SY_Proto( res.vname, res.nname, res.gebdat ) res = cursor:fetch( res, "a" ) end -- Cursor schliessen cursor:close()