Italian Caratteri speciali con SQlite

Alex68

Member
Licensed User
Longtime User
Ciao

ho un problema che non riesco a risolvere.

Devo inserire delle stringhe all'interno di una tabella in SQlite e fin qui tutto OK. Il problema si presenta quando devo inserire una stringa che contiene il carattere singolo apice - ' -.

per esempio se devo inserire la stringa Value="dell'uovo", il comando

Main.dbSQL.ExecNonQuery("INSERT INTO spesa (categoria , prodotto , comprato ) VALUES (' " &Main.Elemento_Premuto&" ', ' " & Value& " ' , '0')")

interpreta l'apice che dopo "dell" come apice di terminazione del comando e quindi la parte rimanente della stringa "uovo" viene interpretata ovviamente come sintax error.

come posso fare??

grazie
 

maxware

Well-Known Member
Licensed User
Longtime User
Ciao Alex
Se non ricordo male usando il modulo dbutils non hai questo problema ( non ho i sorghenti di alfadesk con me ma mi sembra che importato anceh valore con ' al loro interno ) . Se non conosci dbutlis ti posto un esempio che avevo girato a ArenaLuigi per metterlo su sul sito
ciaooo
Mamo
 

ivanomonti

Expert
Licensed User
Longtime User
Ciao

ho un problema che non riesco a risolvere.

Devo inserire delle stringhe all'interno di una tabella in SQlite e fin qui tutto OK. Il problema si presenta quando devo inserire una stringa che contiene il carattere singolo apice - ' -.

per esempio se devo inserire la stringa Value="dell'uovo", il comando

Main.dbSQL.ExecNonQuery("INSERT INTO spesa (categoria , prodotto , comprato ) VALUES (' " &Main.Elemento_Premuto&" ', ' " & Value& " ' , '0')")

interpreta l'apice che dopo "dell" come apice di terminazione del comando e quindi la parte rimanente della stringa "uovo" viene interpretata ovviamente come sintax error.

come posso fare??

grazie

Provato a scrivere in questo modo replace(testo,"'", "\'") mettendo \ davanti fai capire che il carattere e speciale.
 

luke2012

Well-Known Member
Licensed User
Longtime User
Io ho risolto senza cambiare funzione SQL e semplicemente sostituendo l'apice con il doppio apice tutte le volte che mi capita di passare una stringa in input ad una query.
 

timo

Active Member
Licensed User
Longtime User
Io uso queste due funzioni; una prima di fare un INSERT/EDIT e l'altra dopo aver fatto un SELECT:

B4X:
Sub valutaTesto(testo As String) As String
'toglie "'" (Chr(39)) e sostituisce  con un asterisco (Chr(42)) dai testi imessi dall'utente
'(nella edtBox,ecc) per poterlo registare nel DB SqLite

Dim new As String
new = testo.Replace(Chr(39),Chr(42))
Return new

End Sub



Sub restituisciTesto (testo As String) As String
'restituisce la frase rimettendo l'apostrofo
'per visualizzarla correttamente a schermo (lblText,ecc)
Dim old As String
old=testo.Replace(Chr(42),Chr(39))
Return old

End Sub
 
Last edited:

arenaluigi

Well-Known Member
Licensed User
Longtime User
Come ha già risposto Klaus, la soluzione migliore è inserendo la parola "QUOTE ".
Poi si possono usare anche altre soluzioni proposte e funzionanti, ma secondo me inserendo la parola chiave "QUOTE" nel codice è più visivo.
Ovviamente mia opinione :)
 

timo

Active Member
Licensed User
Longtime User
Sì, ma come fai a sapere se e quando l'utente usa un apostrofo all'interno di una frase? (ad esempio se il campo è un titolo di canzone,ecc)
Con le due funzioni di cui sopra non hai sorprese.
 
Last edited:

Antonio1

Member
Licensed User
Longtime User
Se posso dare il mio piccolo contributo:
Problema:
come cercare campi di una tabella db già memorizzata (vecchi archivi access) che contengono dati alfanumerici con il famigerato ( ' ) apice utilizzando una istruzione:
SELECT * from miatabella Where nomecampo = &"stringa_da_cercare"

Ho risolto in questo modo:

1) trasformo:
stringa_da_cercare=stringa_da_cercare.Replace( "'", "_")
cioè sostituisco al simbolo ( ’ ) il simbolo( _ ) che in sql significa “qualsiasi”

poi lancio la query utilizzando LIKE al posto di ( = ) cioè:
SELECT * from miatabella Where nomecampo like &"stringa_da_cercare"

in questo caso anche se nel campo è memorizzato qualsiasi dato alfanumerico contenente il simbolo ( ' ) esso viene ignorato o meglio viene considerato come un jolly e la ricerca è congruente.

Vale anche quando al posto della variabile vogliamo cercare con SQL il contenuto di una EditText.text o una label.text ecc


Ciao Antonio
 
D

Deleted member 103

Guest
@timo
Io uso queste due funzioni; una prima di fare un INSERT/EDIT e l'altra dopo aver fatto un SELECT:
B4X:
Sub valutaTesto(testo As String) As String
'toglie "'" (Chr(39)) e sostituisce  con un asterisco (Chr(42)) dai testi imessi dall'utente
'(nella edtBox,ecc) per poterlo registare nel DB SqLite

Dim new As String
new = testo.Replace(Chr(39),Chr(42))
Return new

End Sub
io invece uso questa funzione, cioè raddoppio l'apostrafo:
B4X:
Sub valutaTesto(testo As String) As String

Dim new As String
new = testo.Replace(Chr(39),Chr(39) & Chr(39))
Return new

End Sub
 
Top