| |
|
|
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 eine Datei geschrieben. Jeder Datensatz ist eine Zeile. Die Datei 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 ausgeführt und ist eine eigene Transkation. Mit diesem Befehl wird dieser Modus ausgeschaltet und der Programmierer übernimmt die Kontrolle über 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 ausgeführt. Eine noch offene Transaktion wird ausgeführt.
SQLEXEC "#COMMIT",N
Die aktuelle Transaktion wird ausgeführt und automatisch eine neue begonnen. Sollte die Transaktion nicht komplett ausgeführt werden können, erfolgt automatisch ein ROLLBACK.
SQLEXEC "#ROLLBACK",N
Die aktuelle Transaktion wird nicht ausgeführt. 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 ausgeführt, was in 90% aller Fälle auch korrekt ist. Aber es gibt Fälle, wo mehrere Datenbankanweisungen nur komplett oder überhaupt nicht ausgeführt werden sollen. Hier greifen die Transaktionen. Eine Transaktion wird entweder komplett ausgeführt 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 ausgeführt 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 ▲ |
|
|
|