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
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)
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
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
Grazie lavorerò sulle mappe Grazie mille Gianni
 
Top