Italian ottenere l' elenco delle tabelle di un db

3394509365

Active Member
Licensed User
Longtime User
ciao a tutti ho scritto questo codice usando come esempio SQLiteViewer di EREL ma non sono riuscito ad ottenere un granchè.
In realtà a me serve solo il nome delle tabellenon devo nemmeno caricare le righe che la compongono.

Ho scritto questo:

B4X:
Sub Listatabelle
    Dim Query As String
   
    Dim Dir = GestioneTbl.SQLDataBasePath
    Dim FileName=GestioneTbl.SQLDateBaseName
    Dim SQLTabelName  As String
Dim StringArgs As String
Dim limit As Int
If SQL.IsInitialized Then SQL.Close

Query="SELECT name FROM sqlite_master WHERE type = 'table'"
Dim c As Cursor
    'If StringArgs <> Null Then
        'c = SQL.ExecQuery2(Query, StringArgs)
    'Else
        c = SQL.ExecQuery(Query)
    'End If
    Log("ExecuteMemoryTable: " & Query)
    Dim table As List
    table.Initialize
    If limit > 0 Then limit = Min(limit, c.RowCount) Else limit = c.RowCount
    For row = 0 To limit - 1
        c.Position = row
        Dim values(c.ColumnCount) As String
        For col = 0 To c.ColumnCount - 1
            values(col) = c.GetString2(col)
        Next
        table.Add(values)
    Next
    c.Close

   
   
End Sub


dove sbaglio ?
 

giannimaione

Well-Known Member
Licensed User
Longtime User
SELECT name FROM sqlite_master WHERE type = "table"
 

LucaMs

Expert
Licensed User
Longtime User
Il tuo codice contiene qualche errore (ad esempio, chiude un DB!).

Senza stare a fargli le pulci, basta che inizializzi un db, puoi chiamarlo SQL ma non è certo obbligatorio, io preferisco DB:

B4X:
Public DB as SQL
DB.Initialize(DBDirectory, DBName, False)

' e ottieni la lista:
private lstNomiTabelle as List
lstNomiTabelle = GetTablesNames(DB)

B4X:
Public Sub GetTablesNames(DB As SQL) As List
    Private lstResult As List
    Private Query As String
    Private Cur As Cursor

    Query = "SELECT Name FROM sqlite_master WHERE type = 'table'"

    Cur = DB.ExecQuery(Query)

    lstResult.Initialize
    For r = 0 To Cur.RowCount - 1
        Cur.Position = r
        lstResult.Add(Cur.GetString2(0))
    Next

    Return lstResult
End Sub
 
Last edited:

3394509365

Active Member
Licensed User
Longtime User
ok con qualche piccola aggiustatina, ma funziona grazie

Ti volevo chiedere: Sai come mai mi da in elenco anche una tabella che si chiama "android_metadata" che in realtà sul db non esiste e non la vedo nemmeno con sqllitebrowser ?

ciao
 
Top