====== SQL-Kommando ausführen, Ergebnisse auf dem Heap ====== ''int sqlite3_get_table(\\ sqlite3 *db, \\ const char *zSql,\\ char %%***%%pazResult,\\ int *pnRow, \\ int *pnColumn, \\ char %%**%%pzErrmsg \\ );\\ void sqlite3_free_table(char %%**%%result);'' \\ ---- \\ Diese Funktion kann benutzt werden, um ein oder mehrere SQL-Kommandos auszuführen und die Rückgabewerte auf dem Heap abzulegen. Die Funktion liefert dazu einen Pointer auf den Speicherbereich, sowie die Anzahl der Rückgabezeilen und die Anzahl der Rückgabespalten zurück. - Pointer vom Typ [[dbs:sqlite:libsqlite3:ref:sqlite3|sqlite3]] - Pointer auf das erste Zeichen eines SQL-Kommandos - Pointer vom Typ char%%***%% auf die Rückgabewerte - Pointer auf eine Variable vom Typ int, für die Anzahl der zurückgelieferten Datenbankzeilen - Pointer auf eine Variable vom Typ int, für die Anzahl der zurückgelieferten Datenbankspalten - Pointer vom Typ char%%**%% in den Fehlermeldungen abgelegt werden können. Diese Fehlermeldung muss mit [[dbs:sqlite:libsqlite3:ref:sqlite3_free|sqlite3_free()]] freigegeben werden, um kein Speicherleck zu erzeugen. \\ Das zurückgeliefert Ergebnis muss mit sqlite3_free_table() freigegeben werden, damit kein Speicherleck entsteht\\ \\ Die Rückgabewerte, befinden sich als 0-terminierte UTF-8 Strings in einen Pointerarray. Hier ein Beispiel, wie die Daten abgelegt werden: ^Name ^Alter^ |Max | 20 | |Werner | 45 | |Susi | 31 | Gehen wir von dem diesem SQL-Befehl aus: SELECT * FROM Tabelle; Die Rückgabewert sehen dann wie folgt aus: * pnRow hat den Wert 3, da drei Datenbankzeilen vorhanden sind * pnColumn hat den Wert 2, da zwei Datenbankspalten vorhanden sind. * azResult verwaltet acht Werte. Die Anzahl errechnet sich wie folgt: Zeilenzahl * Spaltenzahl + Spaltenzahl Diese acht Wert sind folgendermaßen angeordnet:\\ \\ ''azResult[0]=="Name";\\ azResult[1]=="Alter";\\ azResult[2]=="Max";\\ azResult[3]=="20";\\ azResult[4]=="Werner";\\ azResult[5]=="45";\\ azResult[6]=="Susi";\\ azResult[7]=="31";''\\