A me questo comportamento non sembra affatto dovuto a FTP, sospetto (e chiedo scusa se sbaglio, cosa impossibile, tranne i casi in cui... sbaglioOra viene il bello, una volta scaricato, il secondo database risulta vuoto, se tento di aggiungere un
record, la sub preposta non mi da nessun errore , mi dice che il record è stato registrato ma non riesco
a visualizzarlo, nella lista non appare e sicuramente non c'è perche se riscrivo il record me lo registra nuovamente,
normalmente mi chiede se sono sicuro di sovrascrivere il record.
Dato che, come ormai dovrebbe essere noto, non ho B4i e tantomeno HW Apple, quindi non so se ci siano particolari differenze, in questo caso, tra B4A e B4i, ho chiesto a ChatGPT di buttare giù una paginetta che esegua le seguenti cose (proprio come le ho elencate a quell'intelligentoneA me questo comportamento non sembra affatto dovuto a FTP, sospetto (e chiedo scusa se sbaglio, cosa impossibile, tranne i casi in cui... sbaglio) che tu scriva in un DB (parli di Android, mi pare, no?!) ma che poi cerchi il record in un secondo DB.
Avvenuta la scrittura del nuovo record, esegui una query di lettura e la visualizzazione di quanto letto (anche un semplice Log)?
' B4XPage per Android e iOS
Sub Class_Globals
Private FTPClient As FTP
Private sql As SQL
Private DBPath As String
Private DBName As String = "mydatabase.db"
End Sub
Public Sub Initialize
' Inizializzazione della B4XPage
End Sub
' Questa routine verrà chiamata quando la pagina viene creata
Private Sub B4XPage_Created (Root As B4XView)
' Imposta il percorso del database in base al sistema operativo
#If B4A
DBPath = File.DirInternal
#Else If B4i
DBPath = File.DirDocuments
#End If
' Scarica il database usando FTP
StartFTPDownload
End Sub
' Scarica il database da un server FTP
Private Sub StartFTPDownload
FTPClient.Initialize("FTP", "ftp.example.com", 21, "user", "password")
FTPClient.PassiveMode = True
FTPClient.DownloadFile("/path/to/remote/db/" & DBName, False, DBPath, DBName)
End Sub
' Evento chiamato quando il download è completato
Private Sub FTP_DownloadCompleted (ServerPath As String, Success As Boolean)
If Success Then
Log("Download completato con successo!")
OpenDatabase
' Inserisci un nuovo record
InsertRecord("Mario", "Rossi")
' Leggi tutti i record e logga i dati
ReadAllRecords
Else
Log("Errore nel download")
End If
End Sub
' Apri il database SQLite
Private Sub OpenDatabase
If File.Exists(DBPath, DBName) Then
sql.Initialize(DBPath, DBName, True)
Else
Log("Database non trovato!")
End If
End Sub
' Inserisci un nuovo record nella tabella "Persona"
Private Sub InsertRecord(Nome As String, Cognome As String)
If sql.IsInitialized Then
sql.ExecNonQuery2("INSERT INTO Persona (Nome, Cognome) VALUES (?, ?)", Array As Object(Nome, Cognome))
Log("Record inserito: " & Nome & " " & Cognome)
Else
Log("Errore: database non inizializzato.")
End If
End Sub
' Leggi tutti i record dalla tabella "Persona" e logga i risultati
Private Sub ReadAllRecords
If sql.IsInitialized Then
Dim ResultSet As ResultSet = sql.ExecQuery("SELECT Nome, Cognome FROM Persona")
Do While ResultSet.NextRow
Dim Nome As String = ResultSet.GetString("Nome")
Dim Cognome As String = ResultSet.GetString("Cognome")
Log("Record: " & Nome & " " & Cognome)
Loop
ResultSet.Close
Else
Log("Errore: database non inizializzato.")
End If
End Sub
' Gestisce l'errore FTP se qualcosa va storto
Private Sub FTP_Error (ErrorMessage As String)
Log("Errore FTP: " & ErrorMessage)
End Sub
' Quando la B4XPage viene chiusa, chiudi anche il database
Private Sub B4XPage_Disappear
If sql.IsInitialized Then sql.Close
End Sub
Sub upload
SQLDataBasePath = xui.DefaultFolder
fl = txtcognome.Text.Trim & txtnome.Text.Trim
testo= "nomefiledb.rsd"
If File.Exists(SQLDataBasePath,testo) Then
ftp.Initialize("ftp", "ftp.miosito.it", 21, "*******@aruba.it", "*******")
ftp.PassiveMode = True
If RadioB1.Checked=True Then
'tipo di professionista
Dim sf As Object = ftp.UploadFile(SQLDataBasePath,testo,True,"miosito.it/public/miacartella1/" & fl & testo)
Else
'altro tiop di professionista
Dim sf As Object = ftp.UploadFile(SQLDataBasePath,testo,True,"myosito.it/public/miacartella2/" & fl & testo)
End If
Wait For (sf) ftp_UploadCompleted (ServerPath As String, Success As Boolean)
If Success Then
ToastMessageShow("il file **** è stato salvato sul server",False)
Sleep(1000)
Else
ToastMessageShow("Error uploading file****", False)
End If
ftp.Close
End Sub
Sub download
SQLDataBasePath = xui.DefaultFolder
fl = txtcognome.Text.Trim & txtnome.Text.Trim
testo= "nomefiledb.rsd"
testo1= fl & testo
If File.Exists(SQLDataBasePath, "nomefiledb.rsd") Then
File.Delete(SQLDataBasePath, "nomefiledb.rsd")
End If
Sleep(1000)
ftp.Initialize("ftp", "ftp.miosito.it", 21, "*****@aruba.it", "*******")
ftp.PassiveMode = True
If RadioB1.Checked=True Then
Dim sf As Object = ftp.DownloadFile("miosito.it/public/miacartealla1" & testo1,True, SQLDataBasePath, testo)
Else
Dim sf As Object = ftp.DownloadFile("miosito.it/public/miacartella2/" & testo1,True, SQLDataBasePath, testo)
End If
Wait For (sf) ftp_DownloadCompleted(ServerPath As String, Success As Boolean)
If Success Then
ToastMessageShow ("File ****** ripristinato",False)
Sleep(1000)
ftp.close
End Sub
Meglio:SQLDataBasePath = xui.DefaultFolder
#If B4A
SQLDataBasePath = File.DirInternal
#Else If B4i
SQLDataBasePath = File.DirDocuments
#End If
Non intendevo dire che i nomi delle Sub siano sospetti, che possano creare problemi, ma che avendo messo uno Sleep(1000) nella "download", se esegui una cosa di questo tipo:Grazie LucaMS dei consigli, il nome delle sub non sono downoload e upload, l'ho scritto nel post per fa capire ogni sub cosa fa
download
ScriviNuovoRecord - db
Leggi_i_record - db
Guarda il codice generato da ChatGPT. Ha un evento:. per avere gli eventuali errori di ftp come fare?.
' Gestisce l'errore FTP se qualcosa va storto
Private Sub FTP_Error (ErrorMessage As String)
Log("Errore FTP: " & ErrorMessage)
End Sub
Log("File.LastModified: " & File.LastModified(SQLDataBasePath, FileName))
Log("File.Size: " & File.Size(SQLDataBasePath, FileName))
Wait For (sf) ftp_DownloadCompleted(ServerPath As String, Success As Boolean)
If Success Then
ToastMessageShow ("File **** ripristinato",False)
Sleep(1000)
ftp.close
fl=fl & testo
rimuovi 'rimuove da sito il file scaricato
Sleep(1000)
Else
ToastMessageShow("errore download file ******",False)
End If
Non è così, SQLite è compatibile con entrambi.perchè il database di B4a non è compatibile con B4i mentre quello di B4i viene letto da B4a,
Questo è un punto critico: COME controlli che i DB ci siano? E dove?quando viene effettuato il download, dopo una 20na di secondi chiudo l'App e la riapro, all'apertura scopro se ci sono i database
Msgbox(File.Size(SQLDataBasePath, testo)," ")
paneldb.Visible=True
listadb.AsView.Visible=True
SQL1.Initialize(SQLDataBasePath, nomedb, True)
ToastMessageShow("Qualche secondo.....",False)
updatedb
private Sub updatedb
listadb.Clear
Dim Query As String
Dim ResultSet1 As ResultSet
Query = "SELECT * FROM mytabel"
ResultSet1 = SQL1.ExecQuery("select * from mytabel")
Do While ResultSet1.NextRow
Per quale motivo?ho inserito il codice file.size, io non so dove visualizzare il log cosi ho ho iserito un msgbox
'#BridgeLogger: True
La dimensione dovrebbe essere identica in tutti i casi (a meno che tu non lasci qualcosa in sospeso sul server, ovvero il DB "aperto", ma se ho capito bene, il server è solo d'appoggio per il file, non viene aperto ed usato dal server stesso).record 600 upload sul sito 45104 download 45056 il database viene ripristinato correttamente sia se lo cancello prima o se lo sovrascrivo
record 1000 upload sul sito 61526 download 61439 il database non vienre ripristinato correttamente alla prima query l'app si chiude.
Come farlo:sirjo66 mi dicevi di configurare ftp affinchè faccia il trasferimento in modo binario, ma non trovo come farlo,
FTP.UploadFile(DeviceFolder, DeviceFile, False, ServerFilePath)
FTP.DownloadFile(ServerFileaPath, False, DeviceFolder, DeviceFile)
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?