Funktionreferenz


_SQLite_GetTable2D

Beschreibung anzeigen in

Gibt ein 2D Array zurück, welches die Spaltennamen und Daten der ausgeführten SQL-Abfrage beinhaltet

#include <SQLite.au3>
_SQLite_GetTable2D ( $hDB, $sSQL, ByRef $aResult, ByRef $iRows, ByRef $iColumns [, $iCharSize = -1 [, $bSwichDimensions = False]] )

Parameter

$hDB Eine offene Datenbank, mit -1 wird die zuletzt geöffnete Datenbank verwendet
$sSQL SQL Anweisung, die ausgeführt werden soll
$aResult Gibt das Ergebnis zurück (siehe Bemerkungen, um nur Datenzeilen ohne die Kopfzeile zu erhalten)
$iRows Gibt die Anzahl an 'Daten' Reihen zurück
$iColumns Gibt die Anzahl an Spalten zurück
$iCharSize [optional] Legt die maximale Größe eines Datenfeldes fest
$bSwichDimensions [optional] Wechselt die Dimensionen von $aResult

Rückgabewert

Erfolg: $SQLITE_OK
Fehler: Einen Wert, welcher mit den $SQLITE_* Konstanten verglichen werden kann
@error: -1 - SQLite meldet einen Fehler (prüfe Rückgabewert)
1 - Fehler beim Aufruf von _SQLite_Query()
2 - Fehler beim Aufruf der SQLite API 'sqlite3_free_table'
3 - Ausführung verhindert durch Sicherheitsmodus
4 - Abbruch, Trennung oder @error gesetzt durch ein Callback (@extended wird auf einen SQLite Fehler gesetzt)

Bemerkungen

Die SQLite-Dateien können von https://www.autoitscript.com/autoit3/pkgmgr/sqlite heruntergeladen werden. Abgespeichert können diese in @ScriptDir, @SystemDir, @WindowsDir oder @WorkingDir werden.

Die Anzahl an Werten in $aResult entspricht (($iRows) + 1) * ($iColumns) Eine NULL wird als numerisch 0 zurückgegeben.
Diese Funktion verwendet mehr Arbeitsspeicher als __SQLite_Query() / _SQLite_Fetch*()... aber sie ist schneller.
Wenn man kein Ergebnis benötigt (oder kein Ergebnis entsteht) verwendet man eher SQLite_Exec().

Wenn man die Kopfzeile nicht erhalten möchte, ist _SQLite_GetTable() zu verwenden.

Verwandte Funktionen

_SQLite_Display2DResult, _SQLite_Exec, _SQLite_GetTable, _SQLite_GetTableData2D, _SQLite_Query

Beispiel

#include <MsgBoxConstants.au3>
#include <SQLite.au3>
#include <SQLite.dll.au3>

Local $aResult, $iRows, $iColumns, $iRval

_SQLite_Startup()
If @error Then
    MsgBox($MB_SYSTEMMODAL, "SQLite Fehler", "sqlite3.dll konnte nicht geladen werden!")
    Exit -1
EndIf
ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CRLF)
_SQLite_Open() ; Öffnet eine :memory: Datenbank
If @error Then
    MsgBox($MB_SYSTEMMODAL, "SQLite Fehler", "Die Datenbank konnte nicht geladen werden!")
    Exit -1
EndIf

;; Beispieltabelle
; Name        | Alter
; -----------------------
; Alice       | 43
; Bob         | 28
; Cindy       | 21

If Not _SQLite_Exec(-1, "CREATE TEMP TABLE persons (Name, Age);") = $SQLITE_OK Then _
        MsgBox($MB_SYSTEMMODAL, "SQLite Fehler", _SQLite_ErrMsg())
If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Alice','43');") = $SQLITE_OK Then _
        MsgBox($MB_SYSTEMMODAL, "SQLite Fehler", _SQLite_ErrMsg())
If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Bob','28');") = $SQLITE_OK Then _
        MsgBox($MB_SYSTEMMODAL, "SQLite Fehler", _SQLite_ErrMsg())
If Not _SQLite_Exec(-1, "INSERT INTO persons VALUES ('Cindy','21');") = $SQLITE_OK Then _
        MsgBox($MB_SYSTEMMODAL, "SQLite Fehler", _SQLite_ErrMsg())

; Abfrage
$iRval = _SQLite_GetTable2d(-1, "SELECT * FROM persons;", $aResult, $iRows, $iColumns)
If $iRval = $SQLITE_OK Then
    _SQLite_Display2DResult($aResult) ; Anzeige des Ergebnisses in der Konsole

    ; $aResult sollte so aussehen:
    ;
    ; Name   Age
    ; Alice  43
    ; Bob    28
    ; Cindy  21
    ;
    ; Wenn das Anzeigeformat in _SQLite_GetTable2d geändert wird (durch Setzen des Parameters fSwitchDimensions auf True),
    ; werden die Dimensionen vertauscht und das Ergebnis wird so aussehen:
    ;
    ; Name  Alice  Bob  Cindy
    ; Age   43     28   21

Else
    MsgBox($MB_SYSTEMMODAL, "SQLite Fehler: " & $iRval, _SQLite_ErrMsg())
EndIf

_SQLite_Close()
_SQLite_Shutdown()