Italian [B4X] Procedura corretta per query consecutive

bra_mik

New Member
Licensed User
Salve,
premetto che ho iniziato da molto poco a guardare questa piattaforma, più per sfizio che per altro.

Ho creato un piccolo DB sqlite con diverse tabelle (4/5 tabelle con circa un centinaio di righe l'una)

Stavo provando a riciclare un po' di codice dagli esempi del booklet. Dovrei interrogare diverse tabelle in sequenza e prelevarne i valori e metterli in una diverse strutture dati adeguate (un lista - array o altro - per ogni tabella - per il momento ho provato ad usare le liste)

L'interfaccia ha diversi button alla cui pressione dovrebbe essere preso un valore random dalla lista corrispondente da far vedere poi in una label.

Mi sono scontrato con due problemi (sono sicuramente cose stupide):
1) dovendo fare più query in sequenza (ho usato ExecQuery2) per popolare le lista come mi devo comportare con "oggetti" SQL e ResultSet ?
SQL lo apro e lo chiudo solo dopo tutte le query (ne basta uno) ?

Posso usare la stessa variabile Resultset per tutte le query o devo dichiararne ed usarne una diversa per ogni interrogazione di tabelle ?

Queste interrogazioni al DB per il popolamento liste nell'approccio B4X pages è corretto farle nella B4XPage_Created ?

2) L'esecuzione dei test fatti mi dà un'eccezione java da cui sembra che utilizzi una versione precedente del DB (che aveva meno tabelle). Per cui non riesce a popolare bene le tabelle.
C'è un modo di pulire dal telefono i dati vecchi (versioni precedenti del DB). Ho visto nel forum delle proposte di aggiunte riga per la cancellazione del DB, ma preferirei da telefono se possibile

Grazie
 

LucaMs

Expert
Licensed User
Longtime User
1) dovendo fare più query in sequenza (ho usato ExecQuery2) per popolare le lista come mi devo comportare con "oggetti" SQL e ResultSet ?
SQL lo apro e lo chiudo solo dopo tutte le query (ne basta uno) ?
No, l'oggetto SQL puoi chiuderlo al termine dell'esecuzione di tutte le query (o perfino alla chiusura dell'app); invece chiudi sempre il ResultSet.


Queste interrogazioni al DB per il popolamento liste nell'approccio B4X pages è corretto farle nella B4XPage_Created ?
Di norma sarebbe il posto migliore ma dipende dal tuo progetto; se una volta caricate le List (o Map?) queste non dovranno essere riempite nuovamente, è il posto migliore.


2) L'esecuzione dei test fatti mi dà un'eccezione java da cui sembra che utilizzi una versione precedente del DB (che aveva meno tabelle). Per cui non riesce a popolare bene le tabelle.
C'è un modo di pulire dal telefono i dati vecchi (versioni precedenti del DB). Ho visto nel forum delle proposte di aggiunte riga per la cancellazione del DB, ma preferirei da telefono se possibile
E' probabile che ci sia un errore di "design", nel modo in cui copi il DB dalla Assets e poi lo apri (ovvero non serve un modo al quale stai pensando).
 

Elric

Well-Known Member
Licensed User
Tieni conto che puoi creare più variabili "ResultSet":

B4X:
Private ResultSet1 as ResultSet
Private ResultSet2 as ResultSet
Private ResultSet3 as ResultSet

e gestire 3 Query.
 

bra_mik

New Member
Licensed User
Alla fine era una cavolata.
Nelle righe (più di 100) avevo 2/3 valori NULL che mandavano in crash tutto quando venivano estratti dal ResultSet. Me ne sono accorto mettendo dei gran log dappertutto.
Alla fine ho aggiunto il controllo sul valore null (<>Null) e sembra funzionare (oltre ad avere rimosso poi tali righe).
Le strutture dati MAP mi pare di capire che siano di fatto dei dizionari ? Volevo implementare una funzione random un po' corretta che non ripetesse la riga di DB più volte finché non sono uscite tutte le altre. Proverò ad usare i map invece delle liste.
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Le strutture dati MAP mi pare di capire che siano di fatto dei dizionari ?
Sì, sono quelle che in VB Net vengono chiamate Dictionary, quindi elenchi/liste di coppie di dati chiave-valore.

Non so esattamente cosa tu debba fare e quindi se per te siano sufficienti le List; se fosse così...
Volevo implementare una funzione random un po' corretta che non ripetesse
https://www.b4x.com/android/forum/threads/b4x-class-clsrnditems.136776/#content
 
Last edited:
Top