Italian rubrica telefonica

LucaMs

Expert
Licensed User
Longtime User
Cmq, se guardi il disegno che ho pubblicato, la cosa è semplice:

Il cursore deve venire caricato tramite query select sia all'inizio che nei casi in cui modifichi o aggiungi un record (è ovvio, no? altrimenti i dati nel cursore non saranno più "validi", attuali).

Dopodiché, sia che tu voglia caricare una listview con i dati della tabella, sia che tu li voglia visualizzare in alcune label o edittext, li preleverai ovviamente dal cursore.
"andare avanti o indietro" significa passare da un record ad un altro. Per fare questo non devi fare altro che impostare la Position del cursore, che punta ai record "interni" al cursore, quindi il tasto btnAvanti incrementerà Cursore.Position di 1 (verificando che Position non abbia già il valore massimo possibile, cioè Cursore.RowCount, il numero di record "contenuti") e btnIndietro farà l'opposto, decrementerà di 1 Cursore.Position, controllando che non diventi inferiore a 0 che è il primo record.
 
Last edited:

caciola

Member
OK il problema della visualizzazione nei campi l'ho risolto perchè il campo id era impostato a text e non a `id` INTEGER PRIMARY KEY AUTOINCREMENT.
Riesco cliccando su "btnavanti" a visualizzare il primo record e su "btnindietro" a visualizzare l'ultimo record, ma non a scorrere i record cliccando nuovamente sugli stessi tasti. Cioè rimane bloccato sulla stessa selezione.

B4X:
Sub btnCaricaDaDB
   cursor1 = SQL1.ExecQuery("SELECT * FROM tabella")
   If cursor1.RowCount = 0 Then
      Msgbox("Non ci sono record", "Esecuzione query")
      Return
   End If
   CaricaListView(0)
   cursor1.Close
End Sub

Sub btnavanti_Click
    lvdb.Clear'need to clear the list
    cursor1 = SQL1.ExecQuery("SELECT * FROM tabella")   
If cursor1.RowCount = 0 Then Return
    Dim Position As Int
    cursor1.Position = Min(cursor1.RowCount - 1, cursor1.Position + 1)
    btnavanti.Enabled = (cursor1.Position < cursor1.RowCount - 1)
    CaricaListView(cursor1.Position)   
    cursor1.Close
End Sub

Sub btnindietro_Click
    lvdb.Clear'need to clear the list
    cursor1 = SQL1.ExecQuery("SELECT * FROM tabella")
  Dim Position As Int
    cursor1.Position = Max(0, cursor1.RowCount - 1)
    btnindietro.Enabled = (cursor1.Position > 0)
    CaricaListView(cursor1.Position) 
    cursor1.Close
End Sub

Sub CaricaListView(Position As Int)
    lvdb.Clear
    cursor1.Position = Position
        txtnominativo.text=cursor1.getString("nominativo")
        txtdirezione.text=cursor1.getString("direzione")
        txtvia.Text=cursor1.GetString("via")
        txtservizio.Text=cursor1.GetString("servizio")
        txtinterno.Text=cursor1.GetString("interno")
        txtntel.text=cursor1.getstring("telefono")
        txtfax.Text=cursor1.GetString("fax")

End Sub
 

LucaMs

Expert
Licensed User
Longtime User
B4X:
Sub btnCaricaDaDB
   cursor1 = SQL1.ExecQuery("SELECT * FROM tabella")
   If cursor1.RowCount = 0 Then
      Msgbox("Non ci sono record", "Esecuzione query")
      Return
   End If
   btnindietro.Enabled = False
   btnavanti.Enabled = (cursor1.RowCount > 1)
   cursor1.Position = 0
   CaricaListView
End Sub

Sub btnavanti_Click
    cursor1.Position = Min(cursor1.Position + 1, cursor1.RowCount -1)
    btnavanti.Enabled = (cursor1.Position < cursor1.RowCount - 1)
    CaricaListView
End Sub

Sub btnindietro_Click
    cursor1.Position = Max(0, cursor1.RowCount - 1)
    btnindietro.Enabled = (cursor1.Position > 0)
    CaricaListView
End Sub

Sub CaricaListView
    lvdb.Clear
        txtnominativo.text=cursor1.getString("nominativo")
        txtdirezione.text=cursor1.getString("direzione")
        txtvia.Text=cursor1.GetString("via")
        txtservizio.Text=cursor1.GetString("servizio")
        txtinterno.Text=cursor1.GetString("interno")
        txtntel.text=cursor1.getstring("telefono")
        txtfax.Text=cursor1.GetString("fax")
End Sub

Ho modificato, QUI, direttamente il codice che hai pubblicato nel post precedente.

Nota che nella routine CaricaListView non stai caricando la ListView ma delle EditText.
 
Last edited:
Top