Italian Ci riprovo...

Luigi S

Member
Licensed User
Un saluto a tutti!
Qualche mese fa ho cominciato a programmare (si fa per dire) su b4a e grazie ad alcuni di voi, sono arrivato alla mia prima paginetta... che usa un file txt per memorizzare i dati.
Mi sono reso conto, ma lo sospettavo già, che per fare quello che ho in mente occorre usare sqlite.
Il problema principale e che io sono un principiante che sa di cosa sta parlando o poco più, e ho bisogno del vostro aiuto, per riuscire nell'impresa.
Ora per fissare le idee e potervi mostrare quello che ho in mente ho preparato un paio di slide, in una la logica del layout e nell'altra il db.
Che ne pensate? Ogni suggerimento costruttivo è benaccetto!
P.S.: non sono assolutamente geloso dell'idea e capisco che qualcuno potrebbe sfruttarla per fare una app a pagamento, l'unica cosa che gli chiedo è di farmi partecipare da remoto alla programmazione, in modo che io possa imparare qualcosa.
schema a blocchi.jpg
schema database.jpg
 

Star-Dust

Expert
Licensed User
Benvenuto,

Lo vuoi sviluppare per te o per altri? Da questo dipende se usare un DataBase (SQL) locale o remoto.
Per PC, per Android o iOs?
 

Luigi S

Member
Licensed User
Per me su android, e magari a qualche amico...

Intanto sto seguendo il tutorial di Erel per implementare L'SQLite, appena finito lo posto...
 

Luigi S

Member
Licensed User
Prima domanda: mi consigliate di costruire il DB con B4A o di costruirlo in altro modo e inserirlo nel pakage da dove verrà prelevato al primo avvio? pregi e difetti?
 

LucaMs

Expert
Licensed User
Prima domanda: mi consigliate di costruire il DB con B4A o di costruirlo in altro modo e inserirlo nel pakage da dove verrà prelevato al primo avvio? pregi e difetti?
Bella domanda. Io, "istintivamente" li preparo "al di fuori", con qualche tool.

Direi che uno dei motivi è che dovessi modificarlo, sarebbe più facile e non dovrei cambiare la parte di b4a che lo crea (anche se ovviamente dovrei modificare il resto del progetto, visto che ho modificato il db!)
 

udg

Expert
Licensed User
Ciao, una considerazione che può avere un peso quando lo scopo del DB sia mediamente ampio (o per questione stilistica):
per una normalizzazione dei dati sarebbe opportuno avere una tabella aereromodello_componente (per brevità a_c) che abbini gli ID degli areomodelli con quelli dei componenti. In questo modo un componente utilizzato su più aereomodelli apparirà un'unica volta nella tabella "componenti" (normalizzazione dei dati), ma avrà enne riferimenti in a_c in funzione di quanti aerei lo utilizzino.

Eviterai anche la difficoltà di memorizzare liste di ID nell'ultimo campo della tabella aereomodelli (pensavi ad un json? ad un blob? ad uan stringa tipo ID1-ID2-ID3..?
 

Luigi S

Member
Licensed User
se distribuirai l'app nel playstore, è buona norma criptare i dati di sqlite con Chiper
Ho appena scoperto cos'è, e per il momento passo..;)

Ciao, una considerazione che può avere un peso quando lo scopo del DB sia mediamente ampio (o per questione stilistica):
per una normalizzazione dei dati sarebbe opportuno avere una tabella aereromodello_componente (per brevità a_c) che abbini gli ID degli areomodelli con quelli dei componenti. In questo modo un componente utilizzato su più aereomodelli apparirà un'unica volta nella tabella "componenti" (normalizzazione dei dati), ma avrà enne riferimenti in a_c in funzione di quanti aerei lo utilizzino.
In realtà ci saranno molti componenti uguali (per esempio i servocomandi) ma nessuno andrà montato su due aeromodelli, voglio mantenere l'unicità inserendo nel campo tipo una sorta di numero di serie creato da me, in modo da poter sapere quanti minuti di volo possiede, e pensadoci mi sa che per questo devo aggiungere qualche campo....

Eviterai anche la difficoltà di memorizzare liste di ID nell'ultimo campo della tabella aereomodelli (pensavi ad un json? ad un blob? ad uan stringa tipo ID1-ID2-ID3..?
Pensavo ad una stringa tipo ID1,ID2,ID7,ID23 in modo da poter sapere quali componenti sono montati, considerando che possono essere da 5 a 20 circa diventa un problema?
 

udg

Expert
Licensed User
Se hai 20 componenti ciascuno del tipo IDxyz ovvero 5 caratteri, allora hai 100 caratteri in tutto ed una stringa può andar bene (il parsing è banale se sono tutti di uguale lunghezza). Altrimenti un json tipo; [1,34,75,99] o anche ["1","34"...] in pratica una lista di numeri o stringhe. Ancora più leggibile sarebbe un JSON del tipo mappa:
{motore:"ABX123", rotore:"111", alasx: "AL88"} e simili; ma dipende se può essere utile identificare in questo modo i componenti e se tutti i modelli hanno struttura simile.

Come di consueto, esistono molteplici soluzioni ad uno stesso problema.
 

Luigi S

Member
Licensed User
Ora il db dovrebbe essere abbastanza funzionale, credo di aver messo tutto quello che mi sembra necessario.
Naturalmete fate le vostre osservazioni.
Un link a qualche tutorial su come procedere ora?

tabelle_db.jpg
 

LucaMs

Expert
Licensed User
Si, un consiglio lo avrei: creiamo (!) un tool con b4j in grado di leggere un DB (anche non SQLite, magari) che crei per noi perlomeno due Activity, una per la gestione tabellare di una... tabella (!) del DB e una per la gestione dettagliata :).

Dato che ancora non esiste, dovrai farlo a manina. Magari cerca di creare queste due Activity in modo che siano facilmente adattabili o modificabili a qualunque tabella.


ANZI... il tool dovrebbe creare una classe che rappresenti una tabella e le due Activity, che utilizzino tale classe!

Se aspetti un pochino di tempo, che io abbia completato la mia app, ti sviluppo io questo tool. Basta quindi attendere... un paio d'anni ancora 😄😔


P.S. E' molto probabile che sul sito tu possa trovare perlomeno il generatore di classi - "classe tabella - entità", eh, perché generatori di classi generiche ci sono certamente.
 
Last edited:

LucaMs

Expert
Licensed User
P.S. E' molto probabile che sul sito tu possa trovare perlomeno il generatore di classi - "classe tabella - entità", eh, perché generatori di classi generiche ci sono certamente.
Ehm... Ahm... :(

https://www.b4x.com/android/forum/threads/class-generator.41515/
(28 maggio 2014!!! 😔)

Chissà se proseguii e, soprattutto... dove sia quella roba!

P.S. Ecco, cercato su questo PC... non trovato. E' probabile che stia su un HD esterno; ma è anche quasi certo che sia obsoleto, dato che all'epoca certamente mancavano tante funzionalità utilissime presenti oggi in tutti gli strumenti B4X, ad iniziare dal Designer in B4J.
 
Last edited:

LucaMs

Expert
Licensed User
Troppo difficile per me, un modo semplice?
Pregare?
Trovare una bacchetta magica?
😄

Che modo semplice può esserci? Dovrai creare delle Activity per gestire quei dati. Come elenco, usare xCustomListView, come dettagli (record di una tabella), creare layout appositi.
 

Luigi S

Member
Licensed User
Ecco, si questo potrebbe essere per me fattibile. Hai qualche dritta su dove posso trovare dei tutorial o esempi oltre quelli di Erel?
 

Luigi S

Member
Licensed User
Io me sa che non ci vedo più...
dove stà secondo voi l'errore di sintassi ?
B4X:
Connection.mySQL.ExecNonQuery("INSERT INTO Aeromodelli VALUES ('" & NomeAeroModID & "','" & edtDataInsMod.Text & "','" & edtDescrizione.Text &"'))
 
Top