Italian Consigli su database

Mattiaf

Active Member
Licensed User
Ciao ragazzi, innanzitutto premetto che non sto cercando del codice pronto da voi, ma piuttosto un consiglio con link a topic rilevanti al mio caso.
Lavoro come guardia giurata e nella mia mansione da rondista capitano un sacco di allarmi. Giriamo con 3 valigette in auto con più di 100 chiavi e ogni volta che la centrale ci chiama ,dobbiamo cercare la chiave del cliente per effettuare l'allarme. Le chiavi sono tutte numerate e la lista dei clienti è scritta su 3 fogli plastificati.. Sapete che casino a trovare la chiave giusta?
vorrei creare un app che mi permetta di creare un database dove posso inserire tutti i valori delle chiavi con i rispettivi nomi e indirizzi tipo "Istituto superiore Pacinotti, Via Cesare Cabras, chiave 01".. Una volta che mi prenderò lo sbattimento di inserire tutti i valori, è fatta. Mancherebbe solo una edit text dove scrivendo il nome del cliente ( Istituto superiore Pacinotti" o della via (Via Cesare Cabras), mi dia come risultato "Istituto superiore Pacinotti, Via Cesare Cabras, chiave 01".. Che tipo di db mi consigliate? Ho cercato in largo per il forum ma moolti post sono vecchi e obsoleti.

Inoltre, non per essere pignolo, ma le ricerche su db possono essere effettuate in modo che se scrivo "Cabras" mi trovi comunque il risultato da me desiderato?
Grazie ragazzi
 

Xfood

Expert
Licensed User
Ciao @Mattiaf quello che chiedi sembra molto semplice,
se non dovi condividere dati con nessuno, ma vuoi un'app che giri sul tuo cell e il db locale sul tuo cell
basta usare sqlite,e poi una schermatina del genere
 

LucaMs

Expert
Licensed User
Longtime User
Lavoro come guardia giurata e nella mia mansione da rondista capitano un sacco di allarmi.
Ho letto fino a quanto sopra (con l'intenzione di leggere anche il resto, ovviamente, ma mi è venuto subito in mente quanto segue, quindi ho sospeso).

Ale e Franz, nell'ultima puntata di Zelig, hanno fatto 3 esempi di frasi in cui, spostando una virgola, cambiasse il significato.
In quella sopra, di Mattia:
Lavoro come guardia giurata e nella mia mansione da rondista capitano, un sacco di allarmi.
la virgola aggiunta farebbe pensare che lui sia "rondista capitàno" (e anche l'accento cambia il significato: càpitano e capitàno) 😊

Leggo il resto :); beh, tra un po'.

P.S. Letto. La risposta di @Xfood mi sembra già più che sufficiente.
Se non fosse che a te servirebbe solo una-tantum, la cosa carina e comoda sarebbe aggiungere il riconoscimento di testo, così non dovresti inserire i 100 record a mano ma farli leggere all'app 😊
 
Last edited:

Mattiaf

Active Member
Licensed User
Ho letto fino a quanto sopra (con l'intenzione di leggere anche il resto, ovviamente, ma mi è venuto subito in mente quanto segue, quindi ho sospeso).

Ale e Franz, nell'ultima puntata di Zelig, hanno fatto 3 esempi di frasi in cui, spostando una virgola, cambiasse il significato.
In quella sopra, di Mattia:

la virgola aggiunta farebbe pensare che lui sia "rondista capitàno" (e anche l'accento cambia il significato: càpitano e capitàno) 😊

Leggo il resto :); beh, tra un po'.

P.S. Letto. La risposta di @Xfood mi sembra già più che sufficiente.
Se non fosse che a te servirebbe solo una-tantum, la cosa carina e comoda sarebbe aggiungere il riconoscimento di testo, così non dovresti inserire i 100 record a mano ma farli leggere all'app 😊
seee implementare il riconoscimento di testo mi richiederebbe più di quanto ci possa impiegare per inserire i 100 record a mano :)
 

Mattiaf

Active Member
Licensed User
Ciao @Mattiaf quello che chiedi sembra molto semplice,
se non dovi condividere dati con nessuno, ma vuoi un'app che giri sul tuo cell e il db locale sul tuo cell
basta usare sqlite,e poi una schermatina del genere
Ti ringrazio, ci ho dato un'occhiata, ma solo alquanto nabbo per implementare quel tipo di db...
Dammi una chance, tempo fa ho usato un txt per salvare dei dati, e pensavo di fare così anche sta volta..
Il codice che ho scritto per ora è :


B4X:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private EditText1 As EditText
    Dim a As String
    Private EditText2 As EditText
    Private Button2 As Button
    Private EditText3 As EditText
End Sub

Public Sub Initialize
'    B4XPages.GetManager.LogEvents = True
End Sub

'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
    If File.exists(File.DirInternal, "chiavi.txt" ) Then
        a = File.ReadString(File.DirInternal, "chiavi.txt")
        EditText3.Text= a
        'EditText2.Text=a
        Else
        File.WriteString(File.DirInternal, "chiavi.txt","")
    End If
End Sub

'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.

Private Sub Button1_Click

    File.WriteString(File.DirInternal, "chiavi.txt", a & CRLF & EditText1.text)
    Sleep(200)
    a = File.Readstring(File.DirInternal, "chiavi.txt")
EditText3.Text=a
End Sub

Private Sub EditText1_TextChanged (Old As String, New As String)
    For Each line As String In File.Readlist(File.DirInternal,"chiavi.txt")
        If line.Contains(EditText1.Text) Then
            EditText2.Text= line
        End If
    Next
    If EditText1.Text="".Trim Then
        EditText2.Text="".Trim
    End If
End Sub

i record sono
B4X:
Martini besta
Martini
Scano
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci

"Sembra funzionare" nel senso che a primo impatto fa il suo sporco lavoro, però...
Come posso rendere la ricerca non case sensitive?
Poi, si può fare in modo che se cerco per "Martini", su edittext compaiano due results, ovvero "Martini e Martini Besta"?
grazie... e scusate per il nabbismo
 

Xfood

Expert
Licensed User
Lascia perdere il txt,
Lavora un po su questo.
Risolverai molti problemi
 

Xfood

Expert
Licensed User
Puoi provare questo esempio
 

LucaMs

Expert
Licensed User
Longtime User
Premesso che ha ragione @Xfood, lo impari velocemente e lo userai in futuro...

nel codice che hai pubblicato, non ottieni la ricerca per nome parziale. Dovresti usare:
B4X:
line.StartsWith
anziché:
If line.Contains(EditText1.Text) Then
Nota che con i DB potresti usare la funzione Like o anche Sound, che consente ricerche anche migliori, non solo per nomi che inizino con xxx.

Se trovasse più righe, inseriscile in una ComboBox, anziché in una EditText.
 
Last edited:

Mattiaf

Active Member
Licensed User
Premesso che ha ragione @Xfood, lo impari velocemente e lo userai in futuro...

nel codice che hai pubblicato, non ottieni la ricerca per nome parziale. Dovresti usare:
B4X:
line.StartWith
anziché:

Nota che con i DB potresti usare la funzione Like o anche Sound, che consente ricerche anche migliori, non solo per nomi che inizino con xxx.

Se trovasse più righe, inseriscile in una ComboBox, anziché in una EditText.
Premetto che chiedo venia e mi vergogno di rispondervi ... :')
Sono al 99% per risolvere questo mini tool e vorrei oramai finirlo..
La versione sql mi richiede un pò più di tempo per essere esaminata, ma vi prometto che lo farò!

Per quanto riguarda te, @LucaMs
Se dovessi usare startswith invece di contains, prendendo come esempio i due records
Martini besta
Martini

Se dovessi cercare solo per "besta", startswith non mi troverebbe nulla, perchè inizia con Martini.. ecco perchè sto usando contains...
Ma è case sensitive sto bastardo
 

Mattiaf

Active Member
Licensed User
Usa entrambe.
If contains OR startsWith...

Per il case sensitive, usa i metodi ToUpperCase (o ToLowerCase, come preferisci) delle variabili string.
Grazie Luca, ho aggiunto anche startswith ora :)
Per quanto riguarda ToUpperCase, non rimpiazzerebbe soltanto le lettere da minuscule in maiuscole e ToLowerCase viceversa?
Non sarebbe possibile cercare per "martini" e comunque trovare "Martini"?


edit: in ogni caso, sia contains o startswith mi trovano solo un risultato e non tutti gli altri, tipo se cerco per "Martini", mi trova solo "Martini Via Cesare Cabras", invece mi aspetto che trovi tutte le linee che iniziano ( startswith ) o che contengano ( contains ) "Martini", dunque mi aspetterei un output quale
Martini
Martini besta
Martini Via Cesare Cabras
Pensi sia possibile?
 

LucaMs

Expert
Licensed User
Longtime User
edit: in ogni caso, sia contains o startswith mi trovano solo un risultato e non tutti gli altri, tipo se cerco per "Martini", mi trova solo "Martini Via Cesare Cabras", invece mi aspetto che trovi tutte le linee che iniziano ( startswith ) o che contengano ( contains ) "Martini", dunque mi aspetterei un output quale
Martini
Martini besta
Martini Via Cesare Cabras
Appunto usando sia Contains OR StartsWith ti troverebbe tutto.
Poi meglio inserire i risultati in una ComboBox, come già detto.
 

Mattiaf

Active Member
Licensed User
Grazie ragazzi, ma su edittext2 l'output è sempre e solo di un risultato

B4X:
Private Sub EditText1_TextChanged (Old As String, New As String)
    For Each line As String In File.Readlist(File.DirInternal,"chiavi.txt")
        If line.ToUpperCase.Contains(EditText1.Text.ToUpperCase) Or line.ToUpperCase.startswith(EditText1.Text.ToUpperCase)  Then
            EditText2.Text= line
        End If
    Next
    If EditText1.Text="".Trim Then
        EditText2.Text="".Trim
    End If
End Sub

Input "Martini"
Output "Martini Via Cesare Cabras"
 

Mattiaf

Active Member
Licensed User
Appunto usando sia Contains OR StartsWith ti troverebbe tutto.
Poi meglio inserire i risultati in una ComboBox, come già detto.
Si si luca userò la combobox e migliorerò i controlli una volta che risolvo il tutto. Sto usando controlli molto grezzi come puoi vedere
 

Xfood

Expert
Licensed User
Devi modificarevquesta riga
Da
EditText2.Text= line

A
EditText2.Text= EditText2.Text & crlf & line
 

Mattiaf

Active Member
Licensed User
Devi modificarevquesta riga
Da
EditText2.Text= line

A
EditText2.Text= EditText2.Text & crlf & line
hmm non ne sono certo...
Input "Martini"
Output
B4X:
Martini besta
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini besta
Martini
Martini Via Cesare Cabras
Alberti Via colombo
Alberti Via gramsci
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
Martini besta
Martini
Martini Via Cesare Cabras
 
Top