Italian Array Multidimensionale / SQL Lite [RISOLTO]

Roberto Tsolakis

Member
Licensed User
Longtime User
Devo creaami un app che mantenga i dati il giusto tempo che l'app sia attiva.
Con VB6 avrei fatto semplicemente un array multidimensionale, ma con B4A è un sistema un pò ostico (almeno dagli esempi che ho trovato in giro), fare la stessa cosa con SQL Lite mi sembra tutto sprecato.

Qualcuno mi può fare un esempio di array multidimensionale ...

L'app come ovvio deve:
- Inserire dati (almeno 2 dimensioni)
- Leggere dati

Grazie mille
 

LucaMs

Expert
Licensed User
Longtime User
Devo creaami un app che mantenga i dati il giusto tempo che l'app sia attiva.
Come dire... non devo salvarli, giusto?

Con VB6 avrei fatto semplicemente un array multidimensionale, ma con B4A è un sistema un pò ostico
Devo dire che non li ho mai usati con B4A ma suppongo che siano la stessa cosa. Tranne per il fatto che non puoi ridimensionarli a runtime senza perderne il contenuto (in VB.Net si può, con VB6... non mi ricordo :)).
Cosa c'è di ostico?


Altrimenti puoi fare in mille modi diversi:

1) puoi usare un array monodimensionale ma caricarci dati di un Tipo creato da te:
B4X:
Sub Process_Globals
    Type tCliente(ID As Int, Nominativo As String)
    Private Clienti() As tCliente

Qui il problema è che gli oggetti di tipo tCliente dovranno essere inizializzati, appunto come tutti gli oggetti.



2) Usare una Map:
B4X:
Sub Process_Globals
    Private mapClienti As Map


' da qualche parte...
    mapClienti.Initialize

    mapClienti.Put(1, "Osvaldo")
    mapClienti.Put(2, "Caterina")

    Log(mapClienti.Get(1))

Le Map hanno un bel po' di caratteristiche speciali utilissime.
 

Roberto Tsolakis

Member
Licensed User
Longtime User
LucaMS ...
Gli oggetti, soprattutto i metodi,su B4A ancora mi sono difficili da comprendere ...
Vero è che ho anche pochissimo tempo di applicarmi.
L'ultimo programma, risale a quando mi hai aiutato per il TTS, ecc. ecc. ... quindi 6 mesi fa. E solo ieri ho avuto qualche minuto di tempo per buttar giù due righe impantanandomi con l'array multidimensionale!

Mi sa che utilizzerò l'array monodimensionale ...
grazie ... ci sentiamo al prossimo intoppo ... diciamo fra qualche ora :)
 

Roberto Tsolakis

Member
Licensed User
Longtime User
mmmhh .... ci siamo

Dopo aver scritto :


Type tCliente(ID As Int, Nome As String, Cognome as String)
dim Clienti() As tCliente


In clienti ... come ci metto i dati ? E come li leggo ?

io pensavo ad una cosa tipo cosi :

Clienti(ID, Nome, Cognome)

ed invece ... m'attacco!

Oppure ho trovato un esempio sul Beginner book


Clienti.ID = NumeroCliente
Clienti.Nome = Nomecliente
Clienti.Cognome = CognomeCliente

Ma non funziona
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
B4X:
Dim Clienti(10) As tCliente

For i = 0 to Clienti.Length - 1
    Clienti(i).Initialize
    Clienti(i).ID = i
    Clienti(i).Nominativo = "Nome #" & i
Next

Però, pensandoci un po' di più, è difficile usarlo come un Array bidimensionale.
Come fai ad ottenere MioArray(3,4)? Non puoi; nemmeno con le Map, anche se hanno più metodi per ricavare dati.
Comunque, gli Array come MioArray(3,4) non danno problemi, eh.
 
Last edited:

Roberto Tsolakis

Member
Licensed User
Longtime User
Tutti gli esempi alla fine fanno riferimento a SQL Lite ....

Ma alla fine un esempio con MioArray() ?
:)

Mi spiace ma dopo 8 ore di lavoro sotto al sole ... proprio non ce la faccio a pensare.
Converrebbe chiudere tutto e andare a letto.
 

LucaMs

Expert
Licensed User
Longtime User
Mi spiace ma dopo 8 ore di lavoro sotto al sole
Converrebbe chiudere tutto e andare a letto.
Eh sì, perché...
Tutti gli esempi alla fine fanno riferimento a SQL Lite
dove lo hai visto SQLite?

Perché ho scritto tCliente? Potevo scrivere tCoordinate.

Ma alla fine un esempio con MioArray() ?
Con VB6 avrei fatto semplicemente un array multidimensionale
Non mi pare ci siano differenze, rispetto a VB6 (anche se me lo sono dimenticato!).
Al limite potrebbe esserci la base, che in B4A è sicuramente 0 e forse in VB6 era 1; cioè, per avere una matrice 5x5, in B4A la dichiari con:

Dim arrMatrice(5, 5) As String (o qualunque altro tipo)

ma gli elementi vanno da (0,0) a (4,4)
mentre, FORSE, in VB6 era da (1,1) a (5,5), pur essendo dichiarata nello stesso modo.
 

klaus

Expert
Licensed User
Longtime User
What kind of data do you want to put into MyArray ?
In B4A Arrays work exactly the same way as in VB6.

B4X:
Public MyArray(5, 5) As String
'insert data
MyArray(0, 0) = "Test00"
MyArray(0, 1) = "Test01"
MyArray(0, 2) = "Test02"
'
'
MyArray(1, 0) = "Test10"

'etc

'read data
MyVar = MyArray(2,3)
 
Last edited:

sirjo66

Well-Known Member
Licensed User
Longtime User
se vuoi simulare in memoria una tabella SQLlite la cosa più semplice è una lista di mappe.

La mappa (Map in B4A) ti permette praticamente di simulare un record, dove appunto memorizzi dei dati sulla Map dandogli anche il nome del campo, e poi aggiungi questa Map ad una lista (List in B4A) e quindi avrai una serie di record

Per maggiori dettagli chiedi pure, ma nel frattempo leggiti il manuale dove spiega le Map e le List

Sergio
 

LucaMs

Expert
Licensed User
Longtime User
se vuoi simulare in memoria una tabella SQLlite la cosa più semplice è una lista di mappe.

La mappa (Map in B4A) ti permette praticamente di simulare un record, dove appunto memorizzi dei dati sulla Map dandogli anche il nome del campo, e poi aggiungi questa Map ad una lista (List in B4A) e quindi avrai una serie di record

Per maggiori dettagli chiedi pure, ma nel frattempo leggiti il manuale dove spiega le Map e le List

Sergio
Sì, l'unico problema è che non tutti i tipi di variabile sono supportati, ma per quelli "di base" va benissimo
 

Roberto Tsolakis

Member
Licensed User
Longtime User
What kind of data do you want to put into MyArray ?
In B4A Arrays work exactly the same way as in VB6.

B4X:
Public MyArray(5, 5) As String
'insert data
MyArray(0, 0) = "Test00"
MyArray(0, 1) = "Test01"
MyArray(0, 2) = "Test02"
'
'
MyArray(1, 0) = "Test10"

'etc

'read data
MyVar = MyArray(2,3)


Per qualche ragione non mi funzionava (forse era la stanchezza) ... ma effettivamente è uguale a vb,net
 
Top