Dieses Beispiel veranschaulicht, wie Cursor für eine Dynamic SQL-SELECT-Anweisung verwendet werden. Es ist eine leichte Änderung des vorangehenden Beispiels. Das oben beschriebene Beispiel für statische Cursor bildet die Verständnisgrundlage für das folgende Beispiel.
Das Programm dcur erlaubt dem Benutzer, mit dem N-Befehl eine Tabelle auszuwählen, die er anschauen möchte. Das Programm zeigt dann so viele Informationen aus dieser Tabelle an, wie auf den Bildschirm passen.
Wenn dieses Programm ausgeführt wird, werden Sie zur Eingabe einer Verbindungszeichenfolge aufgefordert. Im Folgenden finden Sie ein Beispiel.
UID=DBA;PWD=sql;DBF=demo.db |
Das C-Programm mit dem Embedded SQL-Code befindet sich im Verzeichnis %SQLANYSAMP12%\SQLAnywhere\C. Unter Windows Mobile befindet sich ein dynamisches Cursorbeispiel im Verzeichnis \SQLAnywhere\CE\esql_sample. Abgesehen von den Funktionen connect, open_cursor und print gleicht das Programm weitgehend dem vorigen Beispiel.
Die Funktion connect benutzt die Embedded SQL-Schnittstellenfunktion db_string_connect, um die Verbindung zur Datenbank herzustellen. Diese Funktion liefert die zusätzliche Funktionalität, um die Zeichenfolge für die Verbindung zu unterstützen, die benutzt wird, um die Verbindung zur Datenbank herzustellen.
Die Routine open_cursor baut zuerst die SELECT-Anweisung auf:
SELECT * FROM table-name |
Dabei gilt: Tabellenname ist der Parameter, der an die Routine übergeben wird. Dann bereitet sie eine Dynamic SQL-Anweisung mithilfe dieser Zeichenfolge vor.
Die Embedded SQL-Anweisung DESCRIBE wird benutzt, um die Ergebnisse der SELECT-Anweisung in die SQLDA-Struktur zu schreiben.
Zu Beginn wird die Größe der SQLDA geschätzt (3). Ist das nicht groß genug, wird die tatsächliche Größe der Auswahlliste, die vom Datenbankserver zurückgegeben wurde, benutzt, um eine SQLDA der richtigen Größe zuzuweisen.
Die SQLDA-Struktur wird dann mit Puffern gefüllt, die Zeichenfolgen enthalten, die wiederum für das Ergebnis der Abfrage stehen. Die Routine fill_s_sqlda konvertiert alle Datentypen in der SQLDA in DT_STRING und weist Puffer der passenden Größe zu.
Dann wird für diese Anweisung ein Cursor deklariert und geöffnet. Die übrigen Routinen zum Bewegen und Schließen des Cursors sind die gleichen wie beim vorhergehenden Beispiel.
Die Routine fetch sieht etwas anders aus: Sie setzt die Ergebnisse in die SQLDA-Struktur und nicht in eine Liste von Hostvariablen. Die print-Routine ist leicht verändert, um Ergebnisse aus der SQLDA-Struktur bis zur vollen Bildschirmbreite auszugeben. Die print-Routine benutzt auch die Namenfelder des SQLDA-Bereichs, um Überschriften für die Spalten auszugeben.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |