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!!

1679428191578.png
 

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, ...
 
Top