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".
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? ?
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
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.
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.
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
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
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)..
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.
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...
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.
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
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.