parliamo del tuo software:
DIM myconn AS NEW Connection
DIM myres AS Result
WITH myconn
.Name = "/home/andy/Gambas/myZoneLite/data/myZone.db"
.Type = "sqlite3"
.Open
END WITH
qui non va niente bene ... devi ricordarti che se fai un software da distribuire non puoi vincolare un istruzione con un oercorso assoluto ad una cartella del tuo pc
ho visto che nella cartella data hai 3 o 4 db,
immagino che questi contengano dati utili all' applicazione e verranno probabilmente utilizzati per aggiungervi nuovi dati,
questo implica che al primo avvio devi copiare i db dalla cartella presente dentro l' applicativo a una cartella nel pc dell' utente (solitamente in home a scelta se in una cartella con il nome del programam oppure in una cartella nascosta con il nome del programma)
es:
public sub avio()
if not exist user.home & "/myzone" then
mkdir user.home & "/mtzone"
copy "data/db1.db" to user.home & /myzone/db1.db
.....
.......
....
copy "data/db4.db" to user.home & /myzone/db4.db
a questo punto farai riferimento al db1 con:
WITH myconn
.Name = "user.home & /myzone/db1.db"
.Type = "sqlite3"
.Open
END WITH
finchè non effettuerai la modifica il programma non sarà utilizzabile da nessuno
ps non farti prendere dalla vogli di utilizzare application.path per lincare i db perchè non funzionerebbe in scrittura a meno che non avvi il prog da root
ps1: molto utile a volte provare i programmi più complessi come il tuo su una VM con nome utente diverso da quello che utilizzi di solito proprio per testare questo tipo di errori
ps2: giuro che questa è l' ultima volta che scrivo un post su questo argomento! :hatecomputer:
aTest = [Application.Env["BROWSER"]]
IF (Application.Env["KDE_FULL_SESSION"]) THEN
aTest.Add("konqueror")
ELSE IF (Application.Env["GNOME_DESKTOP_SESSION_ID"]) THEN
aTest.Add("epiphany")
aTest.Add("firefox")
END IF
aTest.Add("konqueror")
aTest.Add("mozilla-firefox")
aTest.Add("firefox")
aTest.Add("mozilla")
aTest.Add("seamonkey")
aTest.Add("opera")
FOR EACH sBrowser IN aTest
bCheck = NOT CheckProgram(sBrowser)
IF bCheck THEN BREAK
NEXT
IF Left(sLink) = "/" THEN sLink = "file://" & Replace(sLink, "?", "%3F")
SHELL sBrowser & " " & Chr$(34) & sLink & Chr$(34)
tutto questo potresti sostituirlo con:
che fa aprire il link dal browser predefinito senza utilizzare la shell (questa è una sottiliezza naturalmente :) )
Hai perfettamente ragione, sarà una cosa sistemata nelle versioni successive, sto cercando di capire quale è la soluzione migliore, tenuto conto che il programma desidero che sia localizzato in questa maniera:
<user home>|Gambas|myZone|varie sottocartelle
Pensavo, ma qui forse mi linciate, di mettere una costante globale in mLibs e di far riferimento a questa nelle varie form:
PUBLIC CONST CartellaDiLavoro AS String = "/Gambas/myZone/"
ad esempio in FMain:
WITH myconn
.Name = User.Home & mLibs.cartelladilavoro" & "data/myHistory.db"
.Type = "sqlite3"
.Open
END WITH
in questo modo modificare tutti i rif in tutte le form
Ma perchè non crei direttamente la tua variabile con il path completo?
PUBLIC CONST PathDiLavoro AS String = User.Home &/ "Gambas/myZone/"
e poi
WITH myconn
.Name = mLibs.PathDiLavoro" &/ "data/myHistory.db"
.Type = "sqlite3"
.Open
END WITH
Si infatti....correggo:
PUBLIC CONST PathDiLavoro AS String = User.Home &/ "Gambas/myZone"
WITH myconn
.Name = mLibs.PathDiLavoro &/ "data/myHistory.db"
.Type = "sqlite3"
.Open
END WITH
non puoi pretendere che qulcuno facci adelle prove del progremma se questo non si avvia :)
aggiungi questo codice in fmain per la copia dei db al primo avvio:
PRIVATE SUB crea_directory()
IF NOT Exist(mLibs.CartellaDiLavoro) THEN
TRY MKDIR user.Home & "/Gambas"
TRY MKDIR user.Home & "/Gambas/myZoneLite"
TRY MKDIR user.home & "/Gambas/myZoneLite/data"
COPY "data/myBlog.db" TO mLibs.CartellaDiLavoro & "data/myBlog.db"
COPY "data/myHistory.db" TO mLibs.CartellaDiLavoro & "data/myHistory.db"
TRY COPY "data/mySports.db" TO mLibs.CartellaDiLavoro & "data/mySports.db"
TRY COPY "data/myZone.db" TO mLibs.CartellaDiLavoro & "data/myZone.db"
ENDIF
CATCH
Message.Error(Error.Text & "\n" & Error.Where)
END
PUBLIC SUB Form_Open()
DIM infod1 AS String
DIM infod2 AS String
crea_directory
mLibs.FormCenter(ME)
ME.Title = Application.Title & " v." & Application.Version
UsersRead
UsersCombo
cboUSERS.Index = 0
cboUSERS_Click
IF WeekDay(Now) = 0 THEN
...
....
alle righe 464 e 429 di fmain devi cambiare il percorso da ssoluto a relativo
per il resto direi che devi assolutamente creare una guida , perchè non saprei proprio come usare il programma :)