deutschen Handbuch - QT software GmbH
deutschen Handbuch - QT software GmbH
deutschen Handbuch - QT software GmbH
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
mehrfache, vorbereitete Ausführung (prepared execution).<br />
Direkte Ausführung erfolgt mittels SQLExecDirect, wenn der Befehl<br />
nur einmal ausgeführt werden soll (bspw. SELECT) und keine<br />
Information über den Ergebnisinhalt (result set) vor Ausführung bekannt<br />
ist.<br />
Die vorbereitete Ausführung mittels SQLPrepare und folgendem<br />
SQLExecute wird im gegenteiligen Fall verwendet, also wenn ein<br />
Befehl mehrfach ausgeführt werden soll (bspw. INSERT, UPDATE) oder<br />
wenn Information über den Ergebnisinhalt (result set) vor Ausführung<br />
bekannt ist.<br />
Ein vorbereiteter Befehl wird im allgemeinen schneller ausgeführt als ein<br />
direkter, da für jeden SQL Befehl intern ein „Zugriffsplan“ erstellt wird, der<br />
bei wiederholter Ausführung im vorbereiteten Fall nur einmal zu generieren<br />
ist, hingegen beim direkten Fall bei jedem Befehl. Allerdings ist Vorsicht<br />
beim Verhalten von SQLTransact (d.h. beim COMMIT bzw.<br />
ROLLBACK) oder bei Verwendung von SQL_AUTOCOMMIT (bzw.<br />
SQL_ATTR_AUTOCOMMIT) geboten, da dabei der Zugriffsplan intern<br />
gelöscht werden kann. Näheres hierzu: siehe die Informationstypen via<br />
SQLGetInfo von SQL_CURSOR_COMMIT_BEHAVIOR und<br />
SQL_CURSOR_ROLLBACK_BEHAVIOR.<br />
Vor Ausführung eines SQL Befehls müssen intern Speicherbereiche<br />
angelegt werden, die über die Befehlsidentifkationsnummer (statement<br />
handle) identifiziert werden. Die Befehlsidentifkationsnummer ist vom<br />
Typ SQLHANDLE und kann bspw. wie folgt deklariert werden.<br />
INTEGER (SQLHANDLE) :: stmt = SQL_NULL_HANDLE<br />
Sie wird dann durch den Aufruf von SQLAllocHandle erzeugt und<br />
benötigt die zuvor generierte Verbindungsidentifikationsnummer (im<br />
Beispiel: dbc).<br />
rtc = SQLAllocHandle( SQL_HANDLE_STMT, dbc, stmt )<br />
Vor Ausführung eines SQL Befehls können Werte und Befehlsparameter<br />
gesetzt werden (siehe dazu Abschnitt „Das Setzen von Parametern“).<br />
Schließlich folgt im direkten Fall die Ausführung des Befehls mittels<br />
SQLExecDirect. Z.B.:<br />
rtc = SQLExecDirect( stmt, &<br />
"DELETE FROM Waehrungen WHERE Kuerzel = 'DM'" &<br />
//CHAR(0), SQL_NTSL )<br />
Erläuterung: Die zuvor erzeugte Befehlsidentifkationsnummer (stmt)<br />
identifiziert den intern angelegten Speicherbereich, in dem der<br />
nachfolgende SQL Befehl „DELETE FROM...“ als null-terminierte<br />
Zeichenkette („//CHAR(0)“) abgelegt wird. Die Länge des Befehls wird<br />
intern ermittelt, da als Längenparameter SQL_NTSL (null terminated<br />
string) verwandt wird. Hier ist die "lange" Variange von SQL_NTS<br />
notwendig, da das INTERFACE der Funktion dies fordert.<br />
Im vorbereiteten Fall wird der SQL Befehl SQLPrepare analog<br />
verwandt. D.h., die Funktion verwendet die gleichen Parameter wie<br />
SQLExecDirect. Anschließend können Werte und Befehlsparameter<br />
gesetzt werden (siehe dazu Abschnitt „Das Setzen von Parametern“).<br />
Daraufhin besteht die Möglichkeit Information über das Ergebnis (result<br />
set) vorab zu erhalten. Der Aufruf von SQLExecute schließlich führt<br />
den vorbereiteten Befehl aus. Z.B.:<br />
rtc = SQLExecute( stmt )<br />
http://www.qt<strong>software</strong>.de ForDBC - Fortran Database Connectivity 24