Gambas-it

Gambas3 => Programmazione => Topic aperto da: kicco - 05 Dicembre 2014, 21:25:13

Titolo: [RISOLTO] Ricerca MySQL di stringa contenente '
Inserito da: kicco - 05 Dicembre 2014, 21:25:13
 Lo so, è stato scritto tanto, ho letto ma non ne vengo fuori. :hard:

Codice: gambas [Seleziona]
$Query = "SELECT * FROM elenco WHERE titolo LIKE '%" & TB_titolo.text & "%';"


La questione è come fare se la stringa (TB_titolo.text) contiene il carattere ' (apice).
Ho provato ad utilizzare i consigli qui raccontati.http://www.gambas-it.org/smf/index.php?topic=3340.30 (http://www.gambas-it.org/smf/index.php?topic=3340.30)
Ma niente da fare!
 :'(
Titolo: Re: Ricerca MySQL di stringa contenente '
Inserito da: Gianluigi - 05 Dicembre 2014, 23:09:11
Lo so, è stato scritto tanto, ho letto ma non ne vengo fuori. :hard:

Codice: gambas [Seleziona]
$Query = "SELECT * FROM elenco WHERE titolo LIKE '%" & TB_titolo.text & "%';"


La questione è come fare se la stringa (TB_titolo.text) contiene il carattere ' (apice).
Ho provato ad utilizzare i consigli qui raccontati.http://www.gambas-it.org/smf/index.php?topic=3340.30 (http://www.gambas-it.org/smf/index.php?topic=3340.30)
Ma niente da fare!
 :'(

Se hai fatto le prove sul mio “applicativo” la corretta sintassi di LIKE è questa:
Se provi dal browser:
Codice: sql [Seleziona]
SELECT *
FROM miaTabella
WHERE  Tab_Naz LIKE("Pol'%")


Quindi col codice:
Codice: gambas [Seleziona]
sNazione = "Pol'"
sMioSql = "SELECT * FROM miaTabella WHERE Tab_Naz LIKE(" & "\"" & sNazione & "%\"" & ");"

Oppure:
Codice: gambas [Seleziona]
sMioSql = "SELECT * FROM miaTabella WHERE Tab_Naz LIKE(" & "\"" & sNazione & "%\");"


 :ciao:
Titolo: Re: Ricerca MySQL di stringa contenente '
Inserito da: kicco - 06 Dicembre 2014, 09:16:54
 :ok:
Grazie Gianluigi,
Stavo però vedendo che
Codice: gambas [Seleziona]
 "\"" & TB_titolo.text & "%\"

applicato al titolo " L'anello "
funziona se cerchi " l'a " ma anche " l' "
Se invece ricerchi " anello " o meno astutamente " ' " non trova nulla.
Ho allora provato con
Codice: gambas [Seleziona]
"%\"" & TB_titolo.text & "%\"

Ma così non trova più nulla ???
 :hard: :hard: :hard:
Titolo: Re: Ricerca MySQL di stringa contenente '
Inserito da: Gianluigi - 06 Dicembre 2014, 13:53:23
:ok:
Grazie Gianluigi,
Stavo però vedendo che
Codice: gambas [Seleziona]
 "\"" & TB_titolo.text & "%\"

applicato al titolo " L'anello "
funziona se cerchi " l'a " ma anche " l' "
Se invece ricerchi " anello " o meno astutamente " ' " non trova nulla.
Ho allora provato con
Codice: gambas [Seleziona]
"%\"" & TB_titolo.text & "%\"

Ma così non trova più nulla ???
 :hard: :hard: :hard:

In questo momento non ho sottomano Gambas e DB ma LIKE funziona così se cerchi la parola “L'Aquila”, usi LIKE(“L'A%”) oppure LIKE(“%uila”) oppure LIKE(“%qui%”).
Mi sembra che nel secondo caso tu stia sbagliando sintassi.
 :ciao:
Titolo: Re: Ricerca MySQL di stringa contenente '
Inserito da: kicco - 06 Dicembre 2014, 14:49:21
...hai ragione la sintassi è sbagliata, anche quella che cercavo d'usare è sbagliata.
Adesso ho sistemato tutto.
La verità è che non ho un testo completo con la sintassi MySQL :'(

Grazie, adesso mi dedico all'inserimento i un record nel DB!
 :ciao:
Titolo: Re: [RISOLTO] Ricerca MySQL di stringa contenente '
Inserito da: Gianluigi - 06 Dicembre 2014, 15:09:28
Giusto in SQLite:
La corretta sintassi nel browser:
Codice: sql [Seleziona]
SELECT *
FROM miaTabella
WHERE Tab_Naz LIKE("%'%")


Forse con Quote ti rimane più facile, sempre con il mio applicativo in SQLite puoi fare questa prova
Codice: gambas [Seleziona]
sNazione = "'"
sMioSql = "SELECT * FROM miaTabella WHERE Tab_Naz LIKE(" & Quote("%" & sNazione & "%") & ");"


Credo che la differenza sia solo nelle parentesi che MySQL non usa, ma io di MySQL non ne so nulla...

 :ciao:
Titolo: Re: [RISOLTO] Ricerca MySQL di stringa contenente '
Inserito da: Berserker79 - 09 Dicembre 2014, 20:35:55
Ciao, il carattere ' durante la costruzzione della stringa sql, va raddoppiato. quindi la sintassi diventa:
Codice: gambas [Seleziona]

$Query = "SELECT * FROM elenco WHERE titolo LIKE '%" & Replace$(TB_titolo.text, "'", "''") & "%';"  

In base ai livelli di annidamento delle query, l'apice puo anche quadruplicare e così via.
Titolo: Re: [RISOLTO] Ricerca MySQL di stringa contenente '
Inserito da: Gianluigi - 12 Dicembre 2014, 21:44:10
In base ai livelli di annidamento delle query, l'apice puo anche quadruplicare e così via.
Scusa il ritardo con cui riprendo il tuo post, ti vorrei chiedere se puoi precisare meglio questo passaggio che non ho capito.
Magari se credi con un esempio pratico...
 :ciao:
Titolo: Re: [RISOLTO] Ricerca MySQL di stringa contenente '
Inserito da: Berserker79 - 13 Dicembre 2014, 08:23:10
Ciao, ti porto l'esempio su db SQLSERVER.
Questa è la sintassi per l'inserimento "normale" in una tabella:
Codice: sql [Seleziona]

INSERT INTO TBL_TEST (MIA_COLONNA) VALUES ('L''ALBERO')

Un altro metodo per effettuare l'insert può essere, magari in una store procedure, quello di costruire la sintassi sql come stringa per poi usarla come parametro
per la funzione EXEC (stringasql).
Questa è la sintassi per l'inserimento tramite EXEC:
Codice: sql [Seleziona]

DECLARE @STRSQL VARCHAR(8000)
SET @STRSQL = 'INSERT INTO TBL_TEST (MIA_COLONNA) VALUES (''L''''ALBERO'')'
EXEC(@STRSQL)

Come vedi gli apici sono raddoppiati rispetto alla prima sintassi.
L'esempio che ti ho mostrato non giustifica l'utilizzo dell'EXEC rispetto alla versione "normale", ma torna utile nel caso in cui si debbano eseguire delle istruzioni sql particolari
o molto complesse.
Questo stesso principio vale anche per l'istruzione SELECT.
Ciao.