Italian Chiacchiericci

LucaMs

Expert
Licensed User
Longtime User
Beato te, qui ci sono da ieri 15cm di neve e -1,3 gradi. :(
upload_2018-3-18_17-23-56.png




Troppo lavoro per così poco:
Super.gif
 

LucaMs

Expert
Licensed User
Longtime User
...e che fessacchiotto! Perché non ho usato dei ToggleButton per i numeri da selezionare, anziché cambiare colore ai numeri, cosa nemmeno diretta, in b4j?
Senilità!
Leggermente migliorato (sempre inutile, eh :D) - unica cosa buona che fa è aggiornarsi da sé (se lo avvii, ovviamente, non usa un servizio b4a in background, essendo per PC :))
Super.gif
 

Star-Dust

Expert
Licensed User
Longtime User
Ho trovato un modo per perdere altro tempo.
Una nuova libreria, la chiamerò Penelope... View attachment 65570

Mi hai fatto interrompere la libreria sugli istogrammi e ho realizzato una su SQL.
Adesso sto pensando alla versione successiva. Creare un NavigatorSQl come quelli che si hanno a disposizione su VB.NET
Dove associ le label, EditText o ImageView e con lo scorrere del Navigator automaticamente ti aggiorna la GUI.

Visto che una cosi così semplice non esiste in B4A, la faccio io...misero sviluppatore della domenica
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Adesso sto pensando alla bversione successiva per Creare Dei NavigatorSQl come quelli che si hanno su VB.NET
Dove associ le label, EditText o ImageView e con lo scorrere del Navigator automaticamente ti aggiorna la UI.
Ci ho pensato mille volte, mai fatto (avevo iniziato, sia in VB.Net che B4J; non ricordo a che punto arrivai).
Davvero roba utilissima.


ho realizzato una su SQL.
Visto ma al volo, non so cosa faccia esattamente; se vuoi specificarlo qui... grazie ;)
 

Star-Dust

Expert
Licensed User
Longtime User
Aggiunge alcuni comandi.
Aggiungere un campo, una Tabella.
Cancellare una tabella, una riga.
Aggiornare un campo.

Le cose più sfiziose sono:
Popolare una Lista, ListView con un DB, inclusa l'immagine nel ListView
Salvare immagini in un campo BLOB. Spesso con i comandi classici, é complicato. E caricare un immagine dal DB.
 

Star-Dust

Expert
Licensed User
Longtime User
Salvare delle immagini in un DB SQL
B4X:
Dim oper As sqlite
oper.Initialize
oper.UpdateBitmap(filenamedb,"mytable","ID=1","bitmap",LoadBitmap(File.DirInternalCache,"b4a.png"))
oper.UpdateBitmap(filenamedb,"mytable","ID=2","bitmap",LoadBitmap(File.DirInternalCache,"b4j.png"))
oper.UpdateBitmap(filenamedb,"mytable","ID=3","bitmap",LoadBitmap(File.DirInternalCache,"b4i.png"))

Popolare una ListView da un DB SQL
PopulateListTwoLineBitmap (FileNameDB As String, NameTable As String, FieldName As String, FieldSecondLine As String, FieldID As String, FieldBitmap As String, Condition As String, LV As ListView, CLearListView As Boolean) As String
B4X:
Dim Sq As sqlite
Sq.Initialize
Sq.PopulateListTwoViewLineBitmap(FileDB,"mytable","name","description","ID","bitmap","",ListView1,True)
2.png
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Gia funziona il mio DataSetNavigator
upload_2018-3-19_23-11-2.png
4a.gif


B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim DB As SqlNavigator
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
 
    File.Copy(File.DirAssets,"test.sql",File.DirRootExternal,"test.sql")
    DBn.ConnectDB(File.DirRootExternal,"test.sql",False)
 
    DBn.AddLinkView(ImageView1,"bitmap")
    DBn.AddLinkView(LabelName,"name")
    DBn.AddLinkView(EditTextDescription,"description")
 
    DBn.Query("SELECT * FROM mytable")
    DBn.Position=0
End Sub
 
Last edited:

LucaMs

Expert
Licensed User
Longtime User
Allora... i Like sono d'obbligo, mentre tu... li meriti davvero, hehehe.

Ora però devo capire bene tutta la faccenda (leggIo...).

Dim oper As sqlite
Immagino che sqlite sia il nuovo "tipo" che hai creato, ovvero un wrapper al tipo SQL, insomma, la libreria.

oper.Initialize
Senza parametri, per cui usa/userà un db sqlite già inizializzato/aperto, giusto?

oper.UpdateBitmap(filenamedb,"mytable","ID=1","bitmap",LoadBitmap(File.DirInternalCache,"b4a.png"))
Cos'è filenamedb? Non sarà invece un db SQLite già inizializzato? Se fosse il nome del file db, a quel punto il comando stesso dovrebbe verificare ed eventualmente aprilre il db, mi parrebbe strano. Non sarebbe meglio inizializzare la tua variabile sqlite con un parametro che sia il db sqlite già aperto?
E' chiaro che poi sqlite potrebbe lavorare su unico db, visto che ai comandi come UpdateBitmap non passerai più filenamedb, ma anche con la libreria SQL usi un db per volta, è giusto così.

"ID=1" è la chiave primaria della tabella, immagino; questo va valutato bene, in quanto una chiave potrebbe essere composta da più campi. Inoltre, spesso potrebbe essere utile recuperare/aggiornare un record in base ad una clausola Where anziché tramite chiave primaria.

PopulateListTwoLineBitmap (FileNameDB As String, NameTable As String, FieldName As String, FieldSecondLine As String, FieldID As String, FieldBitmap As String, Condition As String, LV As ListView, CLearListView As Boolean) As String
Ecco, vedo da questo comando che FileNameDB è una string, quindi non un oggetto SQL come pensavo; quindi suppongo che ne crei uno al proprio interno e lo inizializzi, se necessario.
Non lo trovo molto utile ma solo per il fatto che non è utile una ListView; nel 99% dei casi è meglio usare una xCustomListView.

Per il navigator... prossimo post, altrimenti dici che i miei post sono troppo lunghi :p
 

LucaMs

Expert
Licensed User
Longtime User
File.Copy(File.DirAssets,"test.sql",File.DirRootExternal,"test.sql")
Suggerimento che non ha a che fare con le tue librerie: effettuare queste operazioni nello starter, copia ed apertura db; inoltre, copiarlo nella DirInternal, non nella DirRootExternal - sia perché questa potrebbe non essere accessibile, sia perché poi il db sarebbe accessibile anche dall'esterno dell'app e quindi l'utente potrebbe eliminarlo.

DBn.ConnectDB(File.DirRootExternal,"test.sql",False)
Ecco, sarebbe meglio, come ho scritto nel post precedente, che le tue classi/librerie richiedessero un db sqlite aperto nell'inizializzazione; sarebbe tutto più semplice e logico. Inoltre, farei un'unica libreria, in cui il navigatore sia un metodo come gli altri, UpdateBitmap...

Quindi avrei una mia libreria ad esempio di nome SQLExt (SQL Extended), la dichiarerei ed inizializzerei con:

Public sqlxEstrazioni As SQLExt ' tanto per rimanere sul Superenalotto :)
sqlxEstrazioni.Inizialize(sqlEstrazioni) ' sqlEstrazioni sarebbe un db SQL, inizializzato nello Starter (anche sqlxEstrazioni dichiarato e inizializzato nello Starter).

DBn.AddLinkView(ImageView1,"bitmap")
Immagino che qui bitmap sia il nome del campo, giusto?
 

LucaMs

Expert
Licensed User
Longtime User
Inoltre, farei un'unica libreria, in cui il navigatore sia un metodo come gli altri, UpdateBitmap...
Uhm... forse questo no, il navigatore dev'essere una sorta di CustomView.

Piuttosto servirebbe un oggetto non grafico, come navigatore, a cui associare (binding) view di tipo diverso, come ad esempio il navigatore fisico, la view, oppure una ListView, o semplici label, edittext, etc.
 
D

Deleted member 103

Guest
@Star-Dust
Per ora questa Libreria non mi serve, però mi potrebbe tornare utile in qualche nuovo progetto; intanto ci metto il segnalibri. ;)
 

Star-Dust

Expert
Licensed User
Longtime User
@Star-Dust
Per ora questa Libreria non mi serve, però mi potrebbe tornare utile in qualche nuovo progetto; intanto ci metto il segnalibri. ;)
Grazie, é una cosa che pensavo da tempo, ma che non credevo fossi in grado di realizzarla. L'altra notte mentre dormivo un colpo di genio nel sonno (le idee migliori mi vengono quando dormo, non é la prima volta)
Non so se servirà ad altri ma a me serve....
 

Star-Dust

Expert
Licensed User
Longtime User
Allora... i Like sono d'obbligo, mentre tu... li meriti davvero, hehehe.

Ora però devo capire bene tutta la faccenda (leggIo...).


Immagino che sqlite sia il nuovo "tipo" che hai creato, ovvero un wrapper al tipo SQL, insomma, la libreria.


Senza parametri, per cui usa/userà un db sqlite già inizializzato/aperto, giusto?


Cos'è filenamedb? Non sarà invece un db SQLite già inizializzato? Se fosse il nome del file db, a quel punto il comando stesso dovrebbe verificare ed eventualmente aprilre il db, mi parrebbe strano. Non sarebbe meglio inizializzare la tua variabile sqlite con un parametro che sia il db sqlite già aperto?
E' chiaro che poi sqlite potrebbe lavorare su unico db, visto che ai comandi come UpdateBitmap non passerai più filenamedb, ma anche con la libreria SQL usi un db per volta, è giusto così.

"ID=1" è la chiave primaria della tabella, immagino; questo va valutato bene, in quanto una chiave potrebbe essere composta da più campi. Inoltre, spesso potrebbe essere utile recuperare/aggiornare un record in base ad una clausola Where anziché tramite chiave primaria.


Ecco, vedo da questo comando che FileNameDB è una string, quindi non un oggetto SQL come pensavo; quindi suppongo che ne crei uno al proprio interno e lo inizializzi, se necessario.
Non lo trovo molto utile ma solo per il fatto che non è utile una ListView; nel 99% dei casi è meglio usare una xCustomListView.

Per il navigator... prossimo post, altrimenti dici che i miei post sono troppo lunghi :p
La classe Sqlite, é più intesa come una raccolta di procedure. Con una sola classe dichiarata nel global fai tutte le operazioni.
Quindi ho voluto metter eil nome del FileDB in ogni operazione, cosi puoi lavorare su più DBfile senza dichiarare più variabili.

dove vedi "ID=1" é un filtro condizionale, per selezionare i campi che corrispondono a quella condizione, può essere composta da più campi. "ID>1 AND ID<5 OR Name='Ciccio'"
 
Top