Tabellennamen aus SQLite-Datenbank auslesen

  • Hallo!
    Ich versuche die Tabellennamen aller Tabellen einer Datenbank zu bekommen. Ich habe zwar eine Lösung mittels _SQLite_SQLiteExe gefunden, bin damit aber nicht zufrieden, da es damit Schwierigkeiten gibt, wenn die Tabellennamen Leerzeichen enthalten.
    Ich würde eine Lösung mit _SQLite_Exec bevorzugen, wenn möglich und das muss es ja wohl sein.

    Spoiler anzeigen
    [autoit]

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

    [/autoit] [autoit][/autoit] [autoit]

    Local $sDB = @ScriptDir & "\Test.db"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _SQLite_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    _SQLite_Open($sDB)
    _SQLite_Exec(-1, 'CREATE TABLE "Test1" (T11, T12, T13, T14, T15);')
    _SQLite_Exec(-1, 'CREATE TABLE "Test 2" (T21, T22, T23, T24, T25);')
    _SQLite_Exec(-1, 'CREATE TABLE "Test 3" (T31, T32, T33, T34, T35);')

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _SQLite_Close ()

    [/autoit] [autoit][/autoit] [autoit]

    Local $sTableNames = _SQLite_GetTableNames($sDB)
    ConsoleWrite($sTableNames & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    _SQLite_Shutdown ()
    FileDelete($sDB)

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _SQLite_GetTableNames($sDB)
    Local $sTable
    _SQLite_SQLiteExe($sDB, ".tables", $sTable)
    Return $sTable
    EndFunc

    [/autoit]

    Vielen Dank für Vorschläge und Lösungen.

  • Danke Bugfix, so erhalte ich 4 Tabellen wobei die erste den Namen "tbl_name" hat. Wenn man das noch verhindern könte wäre schön, muss aber nicht sein.
    Aber eigentlich bin ich mit der Lösung schon sehr zufrieden.
    Pragma hatte ich auch schon versucht, bin aber auf keinen grünen Zweig gekommen.

    [autoit]

    Func _SQLite_GetTableNames($hDB = -1)
    Local $aResult, $iRows, $iColumns
    _SQLite_GetTable(-1, "SELECT tbl_name FROM sqlite_master WHERE type='table';", $aResult, $iRows, $iColumns)
    Return $aResult
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    so erhalte ich 4 Tabellen wobei die erste den Namen "tbl_name" hat.


    Na das läßt sich doch ändern ;)

    [autoit]

    ;===============================================================================
    ; Function Name: _SQLite_GetTableList
    ; Description:: Gibt alle Tabellen einer geöffneten SQLite.db zurück
    ; Requirement(s): Eine mit _SQLite_Open() geöffnete DB
    ; #include <SQLite.au3>
    ; Return Value(s): Erfolg Ein Array mit den Tabellennamen der DB, an $array[0] die Anzahl
    ; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
    ;===============================================================================
    Func _SQLite_GetTableList()
    Local $aRow, $hQuery, $sTable = ''
    _SQlite_Query (-1, "SELECT tbl_name FROM sqlite_master WHERE type='table';", $hQuery)
    While _SQLite_FetchData ($hQuery, $aRow, False, False) = $SQLITE_OK
    $sTable &= $aRow[0] & Chr(1)
    WEnd
    _SQLite_QueryFinalize($hQuery)
    Return StringSplit(StringTrimRight($sTable, 1), Chr(1))
    EndFunc ;==>_SQLite_GetTableList

    [/autoit]