Italian rubrica telefonica

LucaMs

Expert
Licensed User
Longtime User
Una cosa del genere (scritta qui, quindi non testata, ma non dovrebbe contenere errori):
B4X:
Private Cursor1 As Cursor

Sub btnCaricaDaDB
   Cursor1 = SQL1.ExecQuery("....")
   If Cursor1.RowCount = 0 Then
      Msgbox("Non ci sono record", "Esecuzione query")
      Return
   End If
   CaricaListView(0)
End Sub

Sub btnAvanti
    If Cursor1.RowCount = 0 Then Return
    Dim Position As Int
    Position = Max(Cursor1.RowCount -1, Cursor1.Position + 1)
    btnAvanti.Enabled = (Position < Cursor1.RowCount -1)
    CaricaListView(Position)
End Sub

Sub btnIndietro
    If Cursor1.RowCount = 0 Then Return
    Dim Position As Int
    Position = Min(0, Cursor1.RowCount -1)
    btnIndietro.Enabled = (Position > 0)
    CaricaListView(Position)
End Sub

Sub CaricaListView(Position As Int)
    lvDati.Clear
    Cursor1.Position = Position
    lvDati.Add(getString("nominativo"))
    '...
End Sub


Se il cursore lo definisci nella Process_Globals in effetti dovrebbe essere anche meglio, perché non sarà ridefinito ogni volta che verrà visualizzata l'Activity (se non quando riavii l'app); però meglio definirla con Private, anziché con Dim (così non è visibile da altri moduli del progetto).
 
Last edited:

caciola

Member
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)
End Sub

Sub btnavanti_Click
    If cursor1.RowCount = 0 Then Return
    Dim Position As Int
    Position = Max(cursor1.RowCount -1, cursor1.Position + 1)
    btnavanti.Enabled = (Position < cursor1.RowCount -1)
    CaricaListView(Position)                               
End Sub

Sub btnindietro_Click
If cursor1.RowCount = 0 Then Return
    Dim Position As Int
    Position = Min(0, cursor1.RowCount -1)
    btnindietro.Enabled = (Position > 0)
    CaricaListView(Position) 
End Sub

Sub CaricaListView(Position As Int)
    lvdb.Clear
    cursor1.Position = Position
   ' lvdb.Add(getString("nominativo"))
           lvdb.AddSingleLine(cursor1.GetString("nominativo"))
        lvdb.AddSingleLine(cursor1.GetString("direzione"))
        lvdb.AddSingleLine(cursor1.GetString("via"))
        lvdb.AddSingleLine(cursor1.GetString("servizio"))
        lvdb.AddSingleLine(cursor1.GetString("interno"))
        lvdb.AddSingleLine(cursor1.GetString("telefono"))
        lvdb.AddSingleLine(cursor1.GetString("fax"))
End Sub

quando clicco sul bottone btnavanti mi da errore:
An error has occurred in sub:main_caricalistview (java line: 584)
android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1 continue?
In particolar modo invece il btnindietro_Click mi riporta all'ultimo recordo che ho selezionato dalla lista ma me lo visualizza su diverse righe eliminando la visualizzazione lista.
Mi spiego meglio.
Quando lancio l'App questa mi propone la lista a discesa dove visualizzo solo il nominativo e sotto i vari campi che si riempiono quando scorrendo la lista clicco su di un nominativo.
Dopo aver cliccato sul nominativo e caricato nei campi del form vorrei che si passasse al nominativo successivo visualizzandolo nei campi del form e lo stesso indietro.
Così come è impostato mi da errore se vado avanti facendo scomparire la lista e quando clicco su indietro mi riporta all'ultimo record che avevo caricato nei campi del form ma visualizza tutti i dati del record su diverse linee e nient'altro. Spero di essere stato chiaro. :-((
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Ho invertito max e min nelle due routine, ovvero basta sostituire il nome delle due funzioni nei due eventi btn, i parametri devono rimanere gli stessi.

Position = Max(cursor1.RowCount -1, cursor1.Position + 1)
Deve essere:
Position = Min(cursor1.RowCount -1, cursor1.Position + 1)

e
Position = Min(0, cursor1.RowCount -1)
Position = Max(0, cursor1.RowCount -1)


Per il resto, se vuoi un funzionamento diverso, ovvero selezionare un nome ed in conseguenza caricare il record relativo, cambierai la query.


Non è che posso farti tutta l'app; sappi che nessuno riceve denaro da Anyway Software, per queste risposte (a parte qualcuno, probabilmente :confused:).
Il massimo che riceviamo sono solo i Like e spesso nemmeno quelli.

CI SONO I MANUALI :eek: e tanti esempi sul sito ;)
 
Last edited:

caciola

Member
No ti ringrazio l'App è quasi finita mi manca solo questa parte che mi ha bloccato. Sono partito da alcuni video tutorial per cercare di capire il funzionamento di B4A e sono arrivato a costruire questa Rubrica Telefonica utilizzando alcune parti esistenti e adattandole al mio DB.
Come vedi questo è l'esempio, ci sto provando, e comunque ti ringrazio sempre per la tua disponibilità e il tempo che mi hai dedicato:

B4X:
#Region Project Attributes
#ApplicationLabel: Rubrica Telefonica
#VersionCode: 1
#VersionName:'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region

'Activity module
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim SQL1 As SQL
    Dim SQL2 As SQL
    Private cursor1 As Cursor
    Dim voce As VoiceRecognition
    Dim parla As TTS
    Dim gps1 As GPS
    Dim latitudine As Double
    Dim longitudine As Double  
    Dim cliente As HttpClient
End Sub

Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
        'Dim lsq As String
    Dim lvdb As ListView
    Dim txtnominativo As EditText
    Dim txtvia As EditText
    Dim txtdirezione As EditText
    Dim txtservizio As EditText
    Dim txtinterno As EditText
    Dim txttelefono As EditText
    Dim txtfax As EditText
    Dim txtntel As EditText
    Dim btnleggi As Button
    Dim btnnuovo As Button
    Dim btncerca As Button
    Dim btnavanti As Button
    Dim btncancella As Button
    Dim btnindietro As Button
    Dim Label1 As Label
    Dim txtcerca As EditText
'    Dim id As String
    Dim id As Int
    'Dim txtprimo As EditText
    Dim txtmodifica As Button
    Private Label2 As Label
    Private Label3 As Label
    Private Label4 As Label
    Dim EditText1 As EditText
    Private btnvoce As Button
    Dim frase As String
    Dim tempo As Long  
      
    Dim orario As String
    Dim datario As String
    Dim x As Int
    Dim pagina As PhoneIntents
    Dim tel As PhoneCalls
    Dim contatti As Contacts
    Dim lista As List
    Dim incontatti As List
    lista=contatti.GetAll
    Dim countIt As Int
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("rubrica")
    voce.Initialize("voce")
    parla.Initialize("parla")
    x=0
If FirstTime Then
    gps1.Initialize("GPS")
    cliente.Initialize("cliente")
    End If
  
     File.Delete(File.DirInternal,"contatti.db")  ' just for testing loads the original database
    If Not (File.Exists(File.DirInternal,"contatti.db")) Then
        File.Copy(File.DirAssets, "contatti.db", File.DirInternal, "contatti.db")
    End If
    SQL1.Initialize(File.DirInternal, "contatti.db", True)
  
    lvdb.SingleLineLayout.ItemHeight = 25dip
    lvdb.SingleLineLayout.Label.Height = 25dip
    lvdb.SingleLineLayout.Label.TextSize = 14
    lvdb.SingleLineLayout.Label.TextColor = Colors.Black
    btnleggi_Click
Dim GD As GradientDrawable
    GD.Initialize("TR_BL", Array As Int(Colors.Gray, Colors.LightGray))
    Activity.Background = GD
    lvdb.ScrollingBackgroundColor = Colors.Transparent
    lvdb.FastScrollEnabled = True
End Sub

Sub Activity_Resume
If gps1.GPSEnabled=False Then
    ToastMessageShow("Abilita il GPS, perchè risulta disabilitato", True)
    StartActivity(gps1.LocationSettingsIntent)
    Else
        gps1.Start(0,0)
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub btnleggi_Click
    lvdb.Clear    'need to clear the list
    cursor1 = SQL1.ExecQuery("SELECT * FROM tabella")
    Log(cursor1.RowCount)
    For i = 0 To cursor1.RowCount - 1
        cursor1.Position = i
        lvdb.AddSingleLine(cursor1.GetString("id")& " : " & cursor1.GetString("nominativo"))
    Next
    cursor1.Close
End Sub

Sub btnnuovo_Click
    Dim NewID As Int
    Try
        NewID = SQL1.ExecQuerySingleResult("SELECT max(id) FROM tabella ") + 1
    Catch
        NewID = 1
    End Try  
    SQL1.ExecNonQuery("INSERT INTO tabella VALUES('" & NewID & "','" &  txtnominativo.text.Replace("'","''") & "','" &  txtdirezione.text.Replace("'","''") & "','" &  txtservizio.text.Replace("'","''") & "','" &  txtvia.text.Replace("'","''") & "','" &  txttelefono.text.Replace("'","''") & "','" &  txtfax.text.Replace("'","''") & "','"&  txtntel.text.Replace("'","''") & "')")
End Sub

Sub btncerca_Click
    lvdb.Clear'need to clear the list
    If txtcerca.Text.Trim.Length > 0 Then
    cursor1 = SQL1.ExecQuery("Select * FROM tabella where nominativo like '%" & txtcerca.Text & "%' OR via like '%" & txtcerca.Text & "%' OR direzione like '%" & txtcerca.Text & "%' OR servizio like '%" & txtcerca.Text & "%' OR interno like '%" & txtcerca.Text & "%' OR telefono like '%" & txtcerca.Text & "%'  OR fax like '%" & txtcerca.Text & "%'")
    For i = 0 To cursor1.RowCount - 1
        cursor1.Position = i
        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")
    Next
    End If
    cursor1.Close
End Sub

Sub voce_result(Succes As Boolean,Texts As List)
frase=Texts.Get(0)
EditText1.Text=frase
If frase="ciao" Then
parla.Speak("ciao",True)
Else if x=1 Then
x=0
parla.Speak("sto cercando " & frase,True)
StartActivity(pagina.OpenBrowser("http://www.google.it/search?q=" & frase))
Else if x=2 Then
    x=0
    parla.Speak("sto chiamando il numero " & frase,True)
    StartActivity(tel.Call(frase))
    else if x=3 Then
    x=0
    For w=0 To lista.Size-1
    Dim contatto As Contact
    contatto=lista.Get(w)
    If contatto.Name.ToLowerCase=frase.ToLowerCase Then
    StartActivity(tel.Call(contatto.PhoneNumber))
    End If
    Next
    Else If x=4 Then
    x=0
Else if frase="che ore sono" Or frase="che ora è" Then
    tempo=DateTime.Now
orario=DateTime.Time(tempo)
parla.Speak(orario,True)
Else if frase="che giorno è oggi" Or frase="che giorno è" Or frase="data" Then
    tempo=DateTime.Now
    datario=DateTime.Date(tempo)
    parla.Speak(datario,True)
    else if frase="cerca su internet" Or frase="cerca parola" Then
        parla.Speak("cosa devo cercare?",True)
        x=1
    Else if frase="telefona" Or frase="telefono" Or  frase="chiama" Or frase="voglio telefonare" Then
        parla.Speak("quale numero devo chiamare?",True)
        x=2  
        Else if frase="contatto" Or frase="contatti" Or frase="chiama" Or frase="chiama amico" Or frase="chiama contatto" Then
        parla.Speak("quale nome devo chiamare?",True)
        x=3
        Else if frase="dove sono" Or frase="dove" Then
            parla.Speak("un attimo che mi informo", True)
        StartActivity(pagina.OpenBrowser("https://maps.google.it/maps?q=" & latitudine & "," & longitudine & "+(tu+sei+qui) &iwloc=A&hl=it"))
Else if frase="ultime notizie" Or frase="ultime notizie" Or frase="notizie" Then
    Dim richiesta As HttpRequest
    richiesta.InitializeGet("http://www.televideo.rai.it/televideo/pub/solotesto.jsp?pagina=101")
    cliente.Execute(richiesta,1)
    Else if frase="cerca via" Then
        parla.Speak("dove devo portarti?",True)
        x=4  
navigami(frase)
Else
parla.Speak("non ho capito",True)
End If
End Sub

Sub GPS_LocationChanged(luogo As Location)
    latitudine=luogo.Latitude
    longitudine=luogo.Longitude
End Sub
Sub cliente_ResponseSuccess(risposta As HttpResponse,identificativo As Int)
    Dim testo As String
    testo=risposta.GetString("UTF8")
    Dim x As Int
    Dim y As Int
    x=testo.IndexOf("<pre style")
    y=testo.IndexOf("</pre>")
    testo=testo.SubString2(x+51,y)
    parla.Speak(testo,True)
End Sub

Sub navigami(luogo As String)
    parla.Speak("adesso ti porto a " & luogo, True)
    Dim mappa As Intent
    Dim indirizzo As String
    indirizzo="google.navigation:q=" & luogo
    mappa.Initialize(mappa.ACTION_VIEW,indirizzo)
    mappa.SetComponent("googlemaps")
    StartActivity(mappa)
End Sub

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)
End Sub

Sub btnavanti_Click        
If cursor1.RowCount = 0 Then Return
    Dim Position As Int
    Position = Max(cursor1.RowCount -1, cursor1.Position + 1)
    btnavanti.Enabled = (Position < cursor1.RowCount -1)
    CaricaListView(Position)                                
End Sub


Sub btncancella_Click
    SQL1.ExecNonQuery("DELETE FROM tabella where nominativo = '" & txtnominativo.text & "' ")
End Sub


Sub btnindietro_Click
If cursor1.RowCount = 0 Then Return
    Dim Position As Int
    Position = Min(0, cursor1.RowCount -1)
    btnindietro.Enabled = (Position > 0)
    CaricaListView(Position)  
End Sub

Sub CaricaListView(Position As Int)
    lvdb.Clear
    cursor1.Position = Position
           lvdb.AddSingleLine(cursor1.GetString("nominativo"))
        lvdb.AddSingleLine(cursor1.GetString("direzione"))
        lvdb.AddSingleLine(cursor1.GetString("via"))
        lvdb.AddSingleLine(cursor1.GetString("servizio"))
        lvdb.AddSingleLine(cursor1.GetString("interno"))
        lvdb.AddSingleLine(cursor1.GetString("telefono"))
        lvdb.AddSingleLine(cursor1.GetString("fax"))
End Sub

Sub lvdb_ItemClick (Position As Int, Value As Object)
    Dim idvalue As String
    idvalue = Value
    countIt = idvalue.IndexOf(":") 'find location of sperator
    idvalue = idvalue.SubString2(0,countIt) 'find first part of label text
    id = idvalue
'    cursor1 = SQL1.ExecQuery("SELECT * FROM tabella where id = '" & id & "' ")
    cursor1 = SQL1.ExecQuery("SELECT * FROM tabella where id = " & id )
    For i = 0 To cursor1.RowCount - 1
        cursor1.Position = i
        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")
    Next
End Sub

Sub txtmodifica_Click
    SQL1.ExecNonQuery("UPDATE tabella set nominativo ='" &  txtnominativo.text.Replace("'","''") & "',direzione ='" &  txtdirezione.text.Replace("'","''") & "',servizio ='" &  txtservizio.text.Replace("'","''") & "',via ='" &  txtvia.text.Replace("'","''") & "',interno ='"& txtinterno.text &"',fax ='"& txtfax.text &"', telefono ='"& txtntel.text  &"' WHERE id = '" & id &"'")  
End Sub


Sub btnvoce_Click
voce.Listen
End Sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Ed ha qualche problema? (magari rileggo sopra ;)).

Cmq, posso provare a testarla ma dovresti allegare il progetto, anziché pubblicare tutto il codice in quel modo. Per farlo, usa il menu File - Export As Zip e carica il file con il tasto "Upload a File" che vedi in basso quando scrivi un post.

Alla prima occhiata vedo che usi due oggetti SQL e mi suona strano, devo vedere perché.
 

caciola

Member
Ecco il mio progetto. Chiaramente vedrai tutti i difetti di un principiante. Come ti dicevo la mia idea è quella di far scorrere i nominativi nella finestra in alto oppure cercarla tramite la ricerca e da li poter continuare a scorrere in avanti e indietro.
 

Attachments

  • Rubrica Telefonica-z.zip
    394.3 KB · Views: 300

MarcoRome

Expert
Licensed User
Longtime User
Prova a chiudere il cursore ( cursor1.Close ) nelle diverse sub dove non hai chiuso lo stesso
 

caciola

Member
Prova a chiudere il cursore ( cursor1.Close ) nelle diverse sub dove non hai chiuso lo stesso
Mi da errore. Se clicco btnavanti mi visualizza nella lista in alto il nominativo che avevo già selezionato e se vado indietro mi dice che il cursor1 e chiuso e mi blocca tutta l'App.
 

LucaMs

Expert
Licensed User
Longtime User
1) ci sono molti warning (avvertimenti); prima cosa che farei è correggere tutto ciò che li visualizza;
2) ti ho consigliato di usare un cursore "globale" (a livello di activity) per eseguire query di caricamento dati e per spostare il cursore, ma vedo che fai anche inserimenti e cancellazioni; quindi il cursore andrà chiuso e ricaricato;
3) ti conviene usare le versioni 2 delle varie query (quando scrivi: SQL1.ExecNonQuery2(compaiono i parametri ed un esempio) e magari le smartstring. Questo ti solleva dalla rottura di gestire gli apici e le virgolette:
4) non è mai buona pratica usare direttamente delle EditText nelle query, meglio metterci delle variabili (ad esempio potresti creare un Type tImpiegato con i vari nominativo, via, etc. ed una variabile di tipo tImpiegato e, se la variabile è a livello di modulo (activity Main) potresti anche riempirla nei vari eventi TextChanged delle EditText:
B4X:
Type tImpiegato(Nominativo As String, Via As String, _
                Direzione As String, Servizio As String, _
                Interno As String, Telefono As String, Fax As String)


Private mImpiegato As tImpiegato

Activity_Create
mImpiegato.Initialize

Sub txtnominativo_TextChanged (Old As String, New As String)
   mImpiegato.Nominativo = New
End Sub

e magari una routine per caricare mImpiegato quando il cursore cambia perché hai inserito/modificato la tabella e ricaricato il cursore.

Insomma... questi non sono tanto consigli tecnici specifici di b4a, ma di programmazione in generale, per i quali... te tocca lavora' ;)
 
Last edited:

caciola

Member
Ti ringrazio sempre per le tue dritte e sono sicuro che "me tocca lavora'"... ma (c'è sempre un ma) a me basterebbe capire come impostare il btnavanti e il btnindietro per far spostare il cursore al record successivo e visualizzarlo nel form. Tu sei un esperto e si capisce, ma io sono ancora troppo negato per capire bene quello che mi hai descritto. Se hai ancora un poco di pazienza per aiutarmi te ne sarò grato.
 

LucaMs

Expert
Licensed User
Longtime User
Scusa ma è semplice: carichi il cursore (che in effetti devi vedere come un elenco di record) tramite la query Select e poi posizioni il puntatore del cursore in avanti o indietro, modificando Cursor1.Position e, appena fatto, visualizzi il contenuto del record con le varie Cursor1.GetString.

E' chiaro che devi impostare il puntatore (Cursor1.Position) in maniera regolare, con +1 se in avanti e -1 se indietro e verificare di non andare oltre, quindi non dovrà avere valore -1 né un valore superiore a Cursor1.RowCount.

Tutto qua.
 

caciola

Member
Ok ed è quello che mi avevi indicato e che ho fatto, solo che prima era senza la select e mi si bloccava tutto, ora con la select, non si blocca ma quando clicco su avanti mi va a prendere il primo record del DB me lo evidenzia nella lista in alto ma solo il record e non va più avanti, mentre se clicco indietro mi scompare tutta la lista e si blocca tutto fino a quando non clicco di nuovo su elenco e faccio ripartire tutto l'elenco intero.
Lo so che rompo e se non vuoi più aiutarmi va bene. Chiedo a qualcun altro se mi può aiutare. Grazie.

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
    Position = Min(cursor1.RowCount - 1, cursor1.Position + 1)
    btnavanti.Enabled = (Position < cursor1.RowCount - 1)
    CaricaListView(Position)    
    cursor1.Close
End Sub

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

Sub CaricaListView(Position As Int)
    lvdb.Clear
    cursor1.Position = Position
    lvdb.AddSingleLine(cursor1.GetString("id")& " : " & cursor1.GetString("nominativo"))
End Sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
upload_2017-2-18_0-51-39.png
 

caciola

Member
Niente da fare Luca, ti ringrazio, c'ho provato ho fatto come mi hai spiegato e non mi riesce di capire il funzionamento. Abbandono mestamente il progetto e lo studio di B4A. Grazie comunque per il tempo che mi hai dedicato.
 

caciola

Member
Non abbandonare; ci vuole pazienza e tempo. Come qualcuno dice: "Nessuno nasce imparato" ;)

Hai ragione, ma siccome sono un autodidatta, la mia speranza è che, come fu per l'ASP che, magari ora è datato, qualcuno mi instradasse con degli esempi pratici reali e non con delle descrizioni generiche, che mi hanno permesso di studiare concretamente il funzionamento. Ho pubblicato il mio piccolo progettino che comunque non è neanche tanto mio, proprio per vederlo corretto. Capisco che chiedo tanto ma va bene lo stesso. Intanto, essendo anche l'unico che si è speso per me ti ringrazio veramente di cuore. Saluti.
 

LucaMs

Expert
Licensed User
Longtime User
Ho pensato di correggertelo ma penso che tu abbia una versione di prova di b4a o comunque non l'ultilma e se io salvassi il progetto poi non potresti aprire più il layout.

Con la documentazione ci sono anche molti progetti d'esempio da scaricare.

Guardando l'immagine che ho pubblicato nel post #73 vedrai che è semplice, crei una routine per ognuno di quei blocchi e la chiami tramite i vari tasti.

Si tratta solo di impostare la posizione del cursore, che sarà caricato con i dati della tabella del db, prima di caricare la ListView e ricaricare il cursore ogni volta che aggiungi o modifichi un record.
 

caciola

Member
Luca l'ho già fatto e i risultato è stato solo quello di: O riportare il cursore all'inizio della tabella al record 1 o quello di far apparire nella lista scorrevole il nominativo del record che avevo cliccato prima scorrendo, appunto, la lista in alto. Mi spiego meglio, dopo aver selezionato un nominativo dalla lista a scorrimento posta in alto il dato viene visualizzato nei vari campi del form, dopo se io clicco su avanti, scompare tutto l'elenco a discesa e mi compare solo il nominativo che avevo già selezionato.
C'è qualcosa che mi sfugge. Se tu potessi provare sul tuo B4a il funzionamento e riportarmi il dato non avresti bisogno di mandarmi tutto il progetto. Se volessi..."potessi" ;):rolleyes:
 

LucaMs

Expert
Licensed User
Longtime User
Non ho potuto provarlo, sia perché non funziona, come sai, sia perché il layout è alquanto incasinato (le view non sono ben posizionate e soprattutto alcune di loro hanno un nome generico e mi ci perdo :D).

Fammi capire bene le funzionalità che deve avere ( anche nomi di view) e appena posso ci provo (magari ti faccio solo la base, senza GPS, Voice e roba varia che c'è attualmente).
 

caciola

Member
Luca si, in realtà il GPS e la voce non mi interessa. Quelli sono i residui di un tutorial che avevo fatto e che mi piaceva tenere. In realtà il progetto è quello da questo thread che ho adattato alle mie esigenze. Infatti se vai https://www.b4x.com/android/forum/threads/rubrica-telefonica.19784/ trovi tutto, ma purtroppo senza questa parte. Io ho modificato solo le connessioni e le query per il resto il progetto non è mio. Ora la parte che mi manca è quella di visualizzare cliccando su avanti o indietro nei campi del form i vari record. Magari vedendoli scorrere sia sulla parte alta della lista a discesa che nei campi del form. Spero di essere stato chiaro! :p:confused:
 
Top