Ciao! ho un problema. Ho una funzione in cui eseguo questo codice
Dim DBCursor As Cursor
Dim DBSql As SQL
DBSql.Initialize(tDir,"database",True)
DBCursor = DBSql.ExecQuery("SELECT DISTINCT categoria FROM argomenti")
If DBCursor.RowCount >1 Then
Dim elenco(DBCursor.RowCount) As String
For x=0 To DBCursor.RowCount - 1
DBCursor.Position=x
elenco(x)= DBCursor.GetString("categoria")
Next
cmd_entra.Text=DBCursor.RowCount
nell'ultima riga verifico che il numero di record letti dalla query corrisponda a quelli del database che qui allego.
quando faccio il debug mi restituisce sempre il valore di 4 record trovati anzichè quelli effettivamente presenti nel mio db come potete vedere. come posso risolvere questo problema?
Ciao Mauri
Vedo nel Db che la query ritorna 5 record + uno a null
Prova a mettere il campo in una listview e vedere quanti record ti torna
Es.
For x=0 To DBCursor.RowCount - 1
DBCursor.Position=x
listview.AddSingleLine(DBCursor.GetString("categoria"))
Next
A spanne nel tuo codice non vedo nulla di strano ( non ho il tablet con me e quindi non ho fatto la prova del codice )
Ciaooooooo
Mamo
Se scrivi
"If DBCursor.RowCount >1 Then..."
significa "se la tabella contiene più di 2 records..."
e non so se è quello che volevi.
Ti posto un esempio,se ti puo' servire, di mio codice (non gestisce un array; popola solo uno spinner rec per rec e ritorna alla procedura che la chiama
il numero di records presenti (il DB lo apro in _Create e SQL1/TDir li dichiaro in _Process):
B4X:
Sub Activity_Create(FirstTime As Boolean)
If FirstTime Then
'se non esiste gia' lo copio (sulla sd o internal): serve per non sovrascrivere il DB quando aggiorno solo il prg.
'"exil.db" e' un database senza records costruito esternamente e messo nella cartella "files" (Assets).
TDir = DBUtils.CopyDBFromAssets ("exil.db") 'TDir e' Process Global
SQL1.Initialize(TDir, "exil.db", False)'lasciare false
End If
'......ecc.
B4X:
Sub popolaSpinner()As Int
Dim TCursor As Cursor
Dim NumRows,i As Int
TCursor = SQL1.ExecQuery("SELECT titolobrano FROM datibrano ORDER BY titolobrano ASC")
NumRows=TCursor.RowCount
If NumRows > 0 Then
For i = 0 To TCursor.RowCount - 1
TCursor.Position = i
SpinnerCourse.Add(TCursor.GetString("titolobrano"))
Next
TCursor.Close
Else
ToastMessageShow("Nessun brano in memoria.",False)
TCursor.Close
End If
'ritorna al chiamante il no. di records:
Return NumRows
End Sub
estratto da DBUtils (chiamata da _Create):
B4X:
Sub CopyDBFromAssets (FileName As String) As String
Dim TargetDir As String
If File.ExternalWritable Then TargetDir = File.DirDefaultExternal Else TargetDir = File.DirInternal
If File.Exists(TargetDir, FileName) = False Then
File.Copy(File.DirAssets, FileName, TargetDir, FileName)
End If
Return TargetDir
End Sub
Ciao Maury74,
ma ti avevo mandato via email il codice rivisto e corretto sia per quanto riguarda la riapertura ogni volta del database, sia per il conteggio dei record count, che per la copia del database.
Ma non andavano bene ? fammi sapere :sign0098:
Ciao Ragazzi, sto facendo qualche programmino per capire bene come funzionano le procedure di SQL ...
per popolare una LISTVIEW, ho usato anche io una procedura come l'esempio di MAXWARE e funziona senza alcun problema
B4X:
Sub ListRecord
dbCursor =dbSQL.ExecQuery("SELECT * FROM Anagrafico")
ListView1.AddSingleLine("Cliente" & " - " & "Destinazione")
For i = 0 To dbCursor.RowCount - 1
dbCursor.Position = i
ListView1.AddSingleLine(dbCursor.GetString("Cliente") & " - " & dbCursor.GetString("Destinazione"))
Next
dbCursor.Close
End Sub
Io invece ho qualche problemino sulla copia del file database.
Nel PC ho un file miodb.db con 300 record, lo allego al progetto Basic4 e quando lo vado ad aprire nel tablet risulta vuoto .... cosa sbaglio ??
B4X:
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Database")
If File.Exists(File.DirInternal,"miodb.db") = False Then
File.Copy(File.DirAssets,"miodb.db",File.DirInternal,"miodb.db")
End If
If dbSQL.IsInitialized = False Then
dbSQL.Initialize(File.DirInternal, "miodb.db", False)
End If
ListRecord
End Sub
Ciao Luigi
si i file che avevi inviato funzionano. =)
Quest post in effetti è aperto da alcune settimane ma i problemi segnalati qui ormai sono stati superati anche grazie al tuo aiuto!
Pian piano sta nascendo questa piccola app !!