Italian Nome di DB SQLite max 8 caratteri?

LucaMs

Expert
Licensed User
Forse non era chiaro?
Log("il db esiste in DirAssets?: " & File.Exists(File.DirAssets,modApp.NomeDB))
restituisce False.

Il motivo è che NomeDB è "DBPersone.db" e, stranamente, se lo cambi in "dbpersone.db" funziona, ovvero tiene conto di maiuscole e minuscole.

Comunque, è alquanto contorto; ti consiglierei di usare il modulo modDB che sta nel progetto che ho allegato e scriverere anche le query là.
è proprio così, nella Files il nome risulta tutto in minuscolo; infatti, se cambi il valore della costante, mettendo tutto in minuscolo, funziona.
 

Sabotto

Active Member
Licensed User
Si LucaMS. Ma non mi spiego perche se il nome è fino a 8 caratteri se lo prende indipendentemente dal maiuscolo minuscolo e sopra gli 8 no...
Il problema è risolto perchè uso il nome DBPers.db e funziona. Era per capire come mai si comporta cosi, vale a dire perchè "DBPers.db" va bene (senza dover scrivere "dbpers.db"mentre "DBPersone.db" devo scriverlo "dbpersone.db".
 

udg

Expert
Licensed User
Qui una speigazione da parte di Erel.
 

LucaMs

Expert
Licensed User
Non spiega la faccenda della lunghezza, però; ma siccome non ho voglia di provare e, soprattutto, come giustamente dice Erel: "Ma che fai, controlli a runtime se un file esiste nella Assets? Se ce lo hai messo, esiste, se non ce lo hai messo... non esiste e metticelo". Mi pare che abbia scritto letteralmente così, giusto? 😄
 

udg

Expert
Licensed User
La parte interessante era che tutto veniva ricondotto alle minuscole e, se per caso i file venivano aggiunti direttamente nella cartella Files, bastava il click su Sync per riportare anche quelli in minuscolo.
La faccenda della lunghezza del nome non si spiega, a meno che in origine il nome breve fosse in minuscolo.

Ad ogni modo, usare nomi in minuscolo evita problemi di "condivisione" fra i vari sistemi operativi..una cosa in meno di cui preoccuparsi
 

LucaMs

Expert
Licensed User
La parte interessante era che tutto veniva ricondotto alle minuscole e, se per caso i file venivano aggiunti direttamente nella cartella Files, bastava il click su Sync per riportare anche quelli in minuscolo.
La faccenda della lunghezza del nome non si spiega, a meno che in origine il nome breve fosse in minuscolo.

Ad ogni modo, usare nomi in minuscolo evita problemi di "condivisione" fra i vari sistemi operativi..una cosa in meno di cui preoccuparsi
Nell'esempio che ho allegato (utile, perché il modo/posto in cui @Sabotto gestisce il db - copia ed apertura - non mi piace proprio), ho:
B4X:
    mDBDir = xui.DefaultFolder
    mDBFileName = "Test.db"
    
    If Not(File.Exists(mDBDir, mDBFileName)) Then
        File.Copy(File.DirAssets, mDBFileName, xui.DefaultFolder, mDBFileName)
    End If
e funziona perfettamente, malgrado il valore della variabile contenga lettere maiuscole. Il problema è solo nella File.Exists quando "punta" alla Assets; ma dato che non ha alcuna logica effettuare un tale controllo, è questo che si deve evitare, non di usare anche maiuscole.
 

Sabotto

Active Member
Licensed User
Comunque, giusto per complicare ancora un po le cose, a me non funziona nè con "dbpersone.db" nè con "DBPersone.db". Mentre "DBpers.db", "dbpers.db", e tutto cio che ha fino a 8 caratteri si.. Il maiuscolo minuscolo non inficia nulla. La lunghezza si.

Nell'esempio che ho allegato (utile, perché il modo/posto in cui @Sabotto gestisce il db - copia ed apertura - non mi piace proprio), ho:
In realtà è il codice postato da Klaus in un post. (SQLiteLight2) L'ho copiato da li per fare qualche prova
 
Last edited:

LucaMs

Expert
Licensed User
Comunque, giusto per complicare ancora un po le cose, a me non funziona nè con "dbpersone.db" nè con "DBPersone.db". Mentre "DBpers.db", "dbpers.db", e tutto cio che ha fino a 8 caratteri si.. Il maiuscolo minuscolo non inficia nulla. La lunghezza si.


In realtà è il codice postato da Klaus in un post. (SQLiteLight2) L'ho copiato da li per fare qualche prova
e vorrà dire che sculacceremo Klaus 😄
 

LucaMs

Expert
Licensed User
Comunque, giusto per complicare ancora un po le cose, a me non funziona nè con "dbpersone.db" nè con "DBPersone.db". Mentre "DBpers.db", "dbpers.db", e tutto cio che ha fino a 8 caratteri si.. Il maiuscolo minuscolo non inficia nulla. La lunghezza si.
Non è così (anche se, ripeto, non ha senso controllare che un file esista nella Assets):

B4X:
    If File.Exists(File.DirAssets, "DBpers.db") Then
        Log("DBpers.db esiste")
    Else
        Log("DBpers.db NON esiste")
    End If

    If File.Exists(File.DirAssets, "DBperson.db") Then
        Log("DBperson.db esiste")
    Else
        Log("DBperson.db NON esiste")
    End If

    If File.Exists(File.DirAssets, "DBpersone.db") Then
        Log("DBpersone.db esiste")
    Else
        Log("DBpersone.db NON esiste")
    End If
*** mainpage: B4XPage_Appear
** Activity (main) Resume **
** Activity (main) Create, isFirst = true **
*** mainpage: B4XPage_Created
DBpers.db NON esiste
DBperson.db NON esiste
DBpersone.db NON esiste
*** mainpage: B4XPage_Appear
** Activity (main) Resume **
 

Sabotto

Active Member
Licensed User
Non è così (anche se, ripeto, non ha senso controllare che un file esista nella Assets):
Lo so che non ha senso. Infatti non c'era prima che avessi il problema
Quel Log l'ho inserito come debug nel momento in cui l'app andava in errore perchè non riesce a copiare il file da DirAssets a xui.DefaultFolder.
Allora ho inserito quel
B4X:
Log("il db esiste in DirAssets?: " & File.Exists(File.DirAssets,modApp.NomeDB))
Inoltre anche se file.exists ti restituisce false con "DBPers.db" in realtà lo riesce a copiare tranquillamente,
Se testi tutti i nomi in minuscolo otterrai vero per i nomi con max 8 lettere. Da "dbpersone.db" (9 letter) in poi, risulta sempre falso (che non c'è) nonostante che il file dbpersone.db ci sia nella cartella e nella tab Files.
Ma ripeto, il problema se cosi vogliamo chiamarlo è risolto. E' per mia scienza (già ne ho poca...) voler capire perche non gli va bene 9 caratteri. (forse è affezionato al DOS)..
 
Last edited:

LucaMs

Expert
Licensed User
Se testi tutti i nomi in minuscolo otterrai vero per i nomi con max 8 lettere. Da "dbpersone.db" (9 letter) in poi, risulta sempre falso (che non c'è) nonostante che il file dbpersone.db ci sia nella cartella e nella tab Files.
Se eseguo il test tutto in minuscolo, a prescindere dalla lunghezza, anche 9 o più, ed il file effettivamente c'è, lo trova.
 

Sabotto

Active Member
Licensed User
Se eseguo il test tutto in minuscolo, a prescindere dalla lunghezza, anche 9 o più, ed il file effettivamente c'è, lo trova.
Dovresti eseguire il codice (lanciare proprio l'app) non il test del file.exists.
A me (e sottolineo a me...) va in errore (durante la copia da dirassets a xui.defaultfolder), se uso il file denominato "dbpersone.db"

edit: Dopo faccio una prova a creare un db nuovo (piccolo una tabella, come quello in esame) e gli do un nome con 9 lettere. Non vorrei che qualcosa in quello che ho usato ("dbpersone.db") non va bene...
 
Last edited:

Sabotto

Active Member
Licensed User
Fermi tutti. Creato un nuovo db "dbnovecar.db". Una tabella Clienti con IDCLiente, Nome, Cognome, Anno.
Viene letto senza problemi.
A questo punto è il dbpersone.db che ha qualcos che non va. Il db incriminato, nel caso qualcuno con mooolta pazienza voglia indagare è nello zip al post #7.
Grazie a tutti e soprattutto a LucaMS (che è sempre molto diponibile e simpatico) per avermi supportato.
 

Sabotto

Active Member
Licensed User
Yes klaus I agree, but the problem was not the use or not of File.Exist, but the fact that the copy from DirAssets to xui.DefaultFolder did not take place. However, as already mentioned, it was a code taken from your SQLiteLight2.zip example
 

Sabotto

Active Member
Licensed User
Mah .. I don't know what to say. As said, to me with that database ("dbpersone.db") it didn't work and it still doesn't work. Patience. In the end it was a database problem and not a code problem.
 
Top