Italian lista e sqlite

diresc

Member
Licensed User
Longtime User
Ciao a tutti ho popolato una lista da (colonna1) tabella sqlite db
Premetto non so se è giusto con il comando get(n) leggo il valore caricato
con comando set(n) scrivo nella lista .
adesso voglio salvare intera lista composta da 2000 record nella colonna1 del db
come faccio?Grazie in anticipo per tutte le risposte.
 

giannimaione

Well-Known Member
Licensed User
Longtime User
...un po' di codice non fa mai male, ovvero spiega meglio
 

diresc

Member
Licensed User
Longtime User
B4X:
in modulo di codice:

Sub Process_Globals
Dim sql As SQL
Dim cur As Cursor
    
    Public LISTA_DATO As List
    Public LISTA_ATTIVO As List

End Sub

Sub caricadb
    
    Dim DB_NAME As String ="dati.db"
    
    If File.Exists(File.DirInternal,DB_NAME)=False Then
        File.Copy(File.DirAssets,DB_NAME,File.DirInternal,DB_NAME)
    End If
        
    sql.Initialize(File.DirInternal, DB_NAME, True)
    
    cur=sql.ExecQuery("Select * from IMPOSTAZIONI")
    
    LISTA_DATO.Initialize
    LISTA_ATTIVO.Initialize
    lunghezza=cur.RowCount - 1
    For i = 0 To cur.RowCount - 1
        cur.Position = i
    
        LISTA_DATO.Add(cur.GetString("DATO"))
        LISTA_ATTIVO.Add(cur.GetString("ATTIVO"))
    lval=i
        
        
        
    
    Next
    
    cur.Close
    
    
End Sub

Poi nella b4xmainpage:
dim test as string


    test=Servizio.LISTA_DATO.Get(1) 'leggo valore'

    
    tabmenusopra.AddTab(test,xui.LoadBitmap(File.DirAssets,"p1.png"),xui.LoadBitmap(File.DirAssets,"p1.png"))
    
    tabmenusopra.Refresh
    
    Servizio.LISTA_DATO.Set(1,"pippo") 'scrivo nella lista
    
    
    Private Sub tabmenusopra_TabClick (Index As Int)
    'salvare lista aggiornata in db sqlite ???????????'
End Sub
 

giannimaione

Well-Known Member
Licensed User
Longtime User
forse è l'orario, ma vedo molte incongruenze;
B4X:
lunghezza=cur.RowCount - 1
    For i = 0 To cur.RowCount - 1
'meglio : For i = 0 to lunghezza
poi
B4X:
test=Servizio.LISTA_DATO.Get(1) 'qui leggi il secondo valore, visto che una "List" è indicizzata da 0 a .... n;
senza conoscere la struttura della table del DB, posso solo pensare di utilizzare un update
B4X:
Dim query as String = $"update  IMPOSTAZIONI set DATO = '${NuovoValore}' where ${quale condizione?}"$
'e poi esegui
sql.ExecNonQuery(query)
 

diresc

Member
Licensed User
Longtime User
Grazie ma io voglio salvare tutta la lista (dopo che carico il dati nella lista ,modifico alcuni index della lista es.(0) il (20) ecc ..con nuovi valori e poi riscrivo l'intera lista del db
 

giannimaione

Well-Known Member
Licensed User
Longtime User
ok, visto che modifichi la lista "LISTA_DATO", potresti procedere in questo modo:
B4X:
For i = 0 to LISTA_DATO.Size-1
  Dim query as String = $"update  IMPOSTAZIONI set DATO = '${LISTA_DATO.Get(i)}' where ATTIVO = '${LISTA_ATTIVO.Get(i)}' "$
  sql.ExecNonQuery(query)
Next

considera l'utilizzo di una "MAP" al posto delle due "LIST"
quindi nella tua select
B4X:
miaMap.Put(cur.GetString("ATTIVO"), cur.GetString("DATO"))
la MAP è una lista dove ogni elemento (si parte sempre da 0) è costituito da una Chiave UNIVOCA e il relativo valore;
puoi verificare l'esistenza o meno di una Chiave ed estrarre il valore
B4X:
If miaMap.ContainsKey("chiave_da_cercare") Then
    valore = miaMap.Getdefault("chiave_da_cercare", "Ops, c'è qualcosa che non va")
End if
qui il classico esempio
B4X:
For Each Key As String In miaMap.Keys
 Dim Value As Object = miaMap.Get(Key)
 log("Chiave = " & key)
log("Valore = " & value)
Next
 

diresc

Member
Licensed User
Longtime User
Grazie lavorerò sulle mappe Grazie mille Gianni
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…