Aprire e usare db sqlite

Salve scusate se da pivellino mi permetto di chiedere il vostro aiuto, ma da un po sto cercando di imparare ad usare xojo, premetto che provendo da una esperienza con Morfik. Non riesco a connettere ed usare il data base sqlite.
Qualcuno gentilmente puo postarmi un semplice esempio che:

mi connette al db “nomedb.sqllite”
mi crei il record set
e mi consenta di popolare una lista.

Grazie per l’aiuto

Puoi partire dall’esempio a corredo di Xojo, ovvero: Examples\Database\SQLite\SQLiteExample

[b]grazie per il tuo suggerimento ora che ho visot come connettre e leggere i dati volevo chiederti un’altro piccolo aiuto

in un unico metodo ho inserito apertura e lettura come segue:
[/b]
Dim dbFile As FolderItem
Dim db As New SQLiteDatabase
dbFile = GetFolderItem(“D:\Rico Vasti\Documents\MyDB.sqlite”)
db.DatabaseFile = dbFile
If db.Connect Then
// proceed with database operations here…
MsgBox("Database is connected ")
Else
MsgBox("The database couldn’t be opened. Error: " + db.ErrorMessage)
End If

lista.deleteallrows

Dim rs As RecordSet = db.SQLSelect(“SELECT * FROM nomi”)

While Not rs.EOF
lista.addrow (rs.field(“id”),rs.field(“nome”),rs.field(“nomignolo”))
rs.MoveNext
Wend

[b]come posso separarli correttamente? io ho fatto cosi:

dentro il metodo OPEN ho messo:[/b]

Dim dbFile As FolderItem
Dim db As New SQLiteDatabase
dbFile = GetFolderItem(“D:\Rico Vasti\Documents\MyDB.sqlite”)
db.DatabaseFile = dbFile
If db.Connect Then
// proceed with database operations here…
MsgBox("Database is connected ")
Else
MsgBox("The database couldn’t be opened. Error: " + db.ErrorMessage)
End If

Mentre nel metodo vedilista ho messo:

lista.deleteallrows

Dim rs As RecordSet = db.SQLSelect(“SELECT * FROM nomi”)

While Not rs.EOF
lista.addrow (rs.field(“id”),rs.field(“nome”),rs.field(“nomignolo”))
rs.MoveNext
Wend

pero’ non funziona dove ho sbagliato?

Inoltre volevo anche chiederti per registrare nel db dei campi di testo ho smanettato un po in questo modo ma mi da errore

Dim dbFile As FolderItem
Dim db As New SQLiteDatabase
dbFile = GetFolderItem(“D:\Rico Vasti\Documents\MyDB.sqlite”)
db.DatabaseFile = dbFile
If db.Connect Then
db.SQLExecute(“BEGIN TRANSACTION;”)
db.SQLExecute (“INSERT INTO nomi (id,nome,nomignolo) VALUES” + “(?,?,?);”)
//db.SQLExecute (“INSERT INTO nomi (id,nome,nomignolo) VALUES” + “(’”+textfield1.text+"’,’“textfield2.text+”’,’"+textfield3.text+"’);")
// ("+textfield1.text+","+textfield2.text+","+textfield3.text;)
db.sqlexecute(textfield1.text,textfield2.text,textfield3.text)
If db.Error then
MsgBox("Error: " + db.ErrorMessage)
db.Rollback
Else
db.Commit
End If
Else
MsgBox("The database couldn’t be opened. Error: " + db.ErrorMessage)
End If

Ti rigrazio molto per l’aiuto che mi darai scusa se ho usato il grassetto ma serviva per distiguerlo dal codice.

Finch usi un metodo unico ovviamente ti funziona, ma chiaramente poco pratico.
Giustamente hai inserito nell’Open la connessione ad db
Ma creare una propriet db as SQLiteDatabase
e sostituire quella:

Dim db As New SQLiteDatabase

con

db=new SQLiteDatabase

in questo modo crei la connessione e la mantieni fintanto che la finestra aperta (se usi pi finestre puoi definire la propriet a livello di app, richiamandola poi con app.db)

a questo punto il metodo vedilista dovrebbe funzionare (db una propriet per cui disponibile nel metodo)
Ti consiglio anche di non usare un metodo diretto per indicare il path del file sqlite ma qualcosa di pi gestibile (cosa succede se manca D, o una delle cartelle nel percorso). Cos come rendere nil la propriet db se qualcosa non funziona nella connessione (ovviamente poi devi controllare che db non nil prima di utilizzarla negli altri metodi)

Per quanto riguarda il codice per la scrittura:
stessa cosa per quanto riguarda db, per cui puoi partire direttamente da db.sqlExecute (il resto non serve sei gi collegato o al limite metti tutto in un if per non andare in errore se db nil, conseguenza di un non collegamento)

Nel codice hai mischiato codice sql con prepared, va bene ma fatto nel modo giusto (se possibile usare sempre i prepared specie per dati provenienti dall’esterno e non dal codice)
per usare il preparedStatement, lo devi, appunto, prepararlo:

dim prep As SQLitePreparedStatement=db.prepare("INSERT INTO nomi (id,nome,nomignolo) VALUES (?,?,?)"
//Imposti i tipi di dati
prep.BindType(0, SQLitePreparedStatement.SQLITE_INTEGER)
prep.BindType(1, SQLitePreparedStatement.SQLITE_TEXTR)
prep.BindType(2, SQLitePreparedStatement.SQLITE_TEXT)

Ora puoi iniziare la tua transazione

db.SQLExecute("BEGIN TRANSACTION")
prep.SQLExecute(textfield1.text, textfield2.text, textfield3.text)

Nota come ho usato un intero nel db (non so se il tuo caso) e il campo di testo come valore, l’uso del prepared gestisce la cosa internamente.

Ora tutto perfetto. Grazie a Te.
Spero che non ti seccherai se qualche volta ti chiedero’ aiuto
Ancora grazie