Italian [RISOLTO] [B4J] [SQLITE] caratteri strani in campo text di sqlite

ivanomonti

Expert
Licensed User
Longtime User
Quando genero una quesry mi viene fuori così (IO CON I DB VADO IN DISSACCORDO)

INSERT INTO tabella (db001_data_ins, db001_ip_idclient, db001_question, db001_aswer, db001_group, db001_ada_leonardo)values ('23-03-21 2041745','192.168.1.143','oggi','Leonardo da Vinci, conosciuto probabilmente come uno dei più grandi geni italiani, è nato il 15 aprile del 1452 ad Archiano di Vinci. Nel 1469 si è trasferito con il padre a Firenze, dove è diventato allievo del Verrocchio. Leonardo è cresciuto artisticamente in un ambiente dove si insegnava a concepire la figura umana, scolpita o dipinta, non immobile ma inserita nello spazio. Non si è limitato ad operare nel campo artistico ma ha spaziato in quasi tutti i campi dello scibile umano. Ha passato gli ultimi periodi della sua vita in Francia, dove ha portato alcuni quadri dipinti in Italia, tra cui la Gioconda. E` morto ad Amboise il 2 maggio del 1519.','All','Ada');

e se la query la esprimo in sqlite va da bene e senza errori, quando la genero e la esprimo con

B4X:
If sqliteInsert(query)  = True Then
    addListView(values(1),values(0),respose)
End If

B4X:
private Sub sqliteInsert(query As String) As Boolean
    
    Dim dataSqlite As SQL
    dataSqlite.InitializeSQLite(File.DirApp,"miasmart.db",False)
    dataSqlite.BeginTransaction
    
    Try
        dataSqlite.ExecNonQuery(query)
        dataSqlite.TransactionSuccessful
    Catch
        Log(LastException.Message)
        dataSqlite.RollBack 'no changes will be made
    End Try

    Return True
    
End Sub

Risultato finale!!

 

ivanomonti

Expert
Licensed User
Longtime User
Ho inserito .trim e tutto funziona correttamente. (boh)


B4X:
Dim query As String = "INSERT INTO db001 (db001_data_ins, db001_ip_idclient, db001_question, db001_aswer, db001_group, db001_ada_leonardo)" &  _
        "values ('" & DateTime.Date(DateTime.Now) & "','" & values(1).trim & "','" & values(0).trim & "','" & respose.Replace("'",Chr(96)).trim & "','" & values(2).trim & "','" & values(3).Trim & "');"
       
        Log(query)
       
        If sqliteInsert(query)  = True Then
            addListView(values(1),values(0),respose)
        End If
 

LucaMs

Expert
Licensed User
Longtime User
Con tutto il rispetto, o meglio... senza alcun rispetto ? la tua Sub sqliteInsert fa leggermente schifo.

Innanzitutto perché inizializza il db ogni volta che viene chiamata (quindi l'inizializzazione mettila altrove; se è un progetto B4XPages, come penso, potresti metterla nella B4XMainPage - Sub Initialize. Meglio ancora sarebbe creare una classe che si occupi della gestione del DB. Infine, c'è l'utile libreria DBUtils)

Poi, è SEMPRE meglio usare le versioni parametrizzate delle query (tutte quelle il cui nome termina con "2").
Quindi ExecQuery2, ExecNonQuery2, ...
 
Cookies are required to use this site. You must accept them to continue using the site. Learn more…