| |
|
|
Michael Wodrich | Sendet einen SQL-Befehl an die Datenbank. P:S1 ist das SQL-Statement und P:I2 der Ergebnismodus.
Der SQL-Befehl wird normalerweise an den SQL-Treiber geschickt, es gibt jedoch Ausnahmen: Zusatzbefehle, die mit "#" beginnen. Diese Zusatzbefehle sind weiter unten beschrieben.
Ergebnismodus:
0 | - Das Ergebnis wird angezeigt. Jeder Datensatz ist eine Zeile. | 1 | - Das Ergebnis wird in die Listbox-Liste geschrieben und kann dann z.B. mit der @LISTBOX$-Funktion betrachtet werden. Jeder Datensatz ist ein Eintrag in der Liste und kann maximal 32767 Zeichen enthalten; maximal 32767 Datensätze passen in die Liste. | 2 | - Das Ergebnis wird in un File geschrieben. Jeder Datensatz ist eine Zeile. Die File wird mit Set("SQLFile",... festgelegt. Wird kein Dateiname bestimmt, wird "SQL.DAT" im aktuellen Verzeichnis genommen. |
In LINKS:[SQLCount] wird zurückgeliefert, wieviele Datensätze bearbeitet wurden oder -1, wenn ein Fehler auftrat.
Bei SQLExec können ab XProfan 9 direkt Variablen, wie in embedded SQL bei C++ bzw. Java, eingesetzt werden. Einfach einen Doppelpunkt vor die Variable:
SQLExec "SELECT * FROM tabelle WHERE name = :Name$ AND gehalt > :Gehalt%", 1
Wenn Name$ = "Hugo" und Gehalt% = 1200 macht XProfan daraus nun automatisch folgende Zeile:
SQLExec "SELECT * FROM tabelle WHERE name = 'Hugo' AND gehalt > 1200", 1
Es können einfache Variablen ($ % & !) eingesetzt werden, sowie einfache Objekteigenschaften bzw. Strukturelemente. Arrays und Ausdrücke sind nicht erlaubt.
Hier ein kleines Beispielprogramm:
Declare db&, sql$, artikel$, nummer%, preis! Cls artikel$ = "Handbuch" nummer% = 23 preis! = 1.99 db& = @SQLInit("DSN=dBase-Dateien") If db& > 0 SQLExec "INSERT INTO ueb VALUES (:nummer%,:artikel$,:preis!)",0 SQLExec "SELECT * FROM ueb",0 Else Print "Datenbank konnte nicht geöffnet werden!" EndIf WaitInput End
Mit einem "#" werden einige Zusatzbefehle eingeleitet:
SQLEXEC "#AUTOCOMMIT_OFF",N
Normalerweise wird jeder SQL-Befehl sofort corsa und ist eine eigene Transkation. Mit diesem Befehl wird dieser Modus ausgeschaltet und der Programmierer übernimmt die Kontrolle circa die Transaktionen. Mit diesem Befehl beginnt automatisch eine neue Transaktion. Diese währt bis zu einem der drei folgenden Befehle oder bis zu LINK:[SQLDone].
SQLEXEC "#AUTOCOMMIT_ON",N
Der ursprüngliche Modus wird wieder eingestellt: Jeder SQL-Befehl wird sofort corsa. Eine noch offene Transaktion wird corsa.
SQLEXEC "#COMMIT",N
Die aktuelle Transaktion wird corsa und automatisch eine neue begonnen. Sollte die Transaktion nicht komplett corsa werden können, erfolgt automatisch ein ROLLBACK.
SQLEXEC "#ROLLBACK",N
Die aktuelle Transaktion wird nicht corsa. Alle SQL-Befehle seit dem Beginn der Transaktion werden ignoriert. Eine neue Transaktion wird begonnen.
Normalerweise wird unter ODBC jeder SQL-Befehl sofort und endgültig corsa, was in 90% aller Fälle auch korrekt ist. Aber es gibt Fälle, wo mehrere Datenbankanweisungen nur komplett oder überhaupt nicht corsa werden sollen. Hier greifen die Transaktionen. Eine Transaktion wird entweder komplett corsa oder gar nicht.
Im Normalzustand (AUTOCOMMIT_ON) ist jeder SQL-Befehl eine eigene Transaktion. mit AUTOCOMMIT_OFF kann man dies abschalten. Alle folgenden Befehle sind nun eine Transaktion, bis sie mit einem "COMMIT" bestätigt und endgültig corsa werden oder mit "ROLLBACK" verworfen werden. Alle Änderungen in den Datentabellen vor "COMMIT" sind nur temporär und werden im Falle eines "ROLLBACK" wieder zurückgenommen.
Nach COMMIT oder ROLLBACK beginnt eine neue Transaktion. Mit AUTOCOMMIT_ON wird das ursprüngliche Verhalten wieder eingeschaltet. Ist zu diesem Zeitpunkt noch eine Transaktion offen wird sie mit dem nächsten SQL-Befehl beendet. Auch SQLDONE beendet etwaige offene Transaktionen.
Sollte während einer Transaktion ein schwerer Fehler auftreten (Client-Rechner stürzt ab, SQL-Verbindung zum Server bricht ab, etc.), führt die Datenbank in aller Regel ein automatisches ROLLBACK durch. Ab XProfan9 können Variablen im SQL-String eingesetzt werden. Profan-Arrays und Ausdrücke sind nicht erlaubt.
|
|
|
| Programmieren, das spannendste Detektivspiel der Welt. | 11.05.2005 ▲ |
|
|
|