08.05.2013 Aufrufe

deutschen Handbuch - QT software GmbH

deutschen Handbuch - QT software GmbH

deutschen Handbuch - QT software GmbH

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!