Italian ancora problemi con le variabili in sql

3394509365

Active Member
Licensed User
Longtime User
Code:
Cursor3 = SQL1.ExecQuery("SELECT * FROM [" & TblSpin & "] WHERE [" & GestioneTbl.ColNames(2) & "] = '" & Titolo & "'")' così funziona senza quadre ma non prende gli apostrofi

uso questa riga per cercare nella tabella TblSpin dove GestioneTbl.ColNames(2) = '" & Titolo & "'

funziona bene fin quando nella variabile Titolo non ci sono numeri spazi o apostrofi ecc.
lo so bene che devo usare le parentesi quadre ma non mi funzionano in nessun modo, qualduno ha una idea?


Code:
Cursor3 = SQL1.ExecQuery("SELECT * FROM [" & TblSpin & "] WHERE [" & GestioneTbl.ColNames(2) & "] = [" & Titolo & "]")'   non funziona
questo ' il log se uso le parentesi

Code:
android.database.sqlite.SQLiteException: no such column: Amore che prendi amore che dai (code 1): , while compiling: SELECT * FROM [Lista Nomadi] WHERE [Titolo] = [Amore che prendi amore che dai]
 
Last edited:
Le quadre si usano (si possono usare, non sono obbligatorie) sia per i nomi delle tabelle che per quelle dei campi. Normalmente si usano per

Per evitare problemi con le virgolette nei parametri, ti conviene usare la versione 2 delle query, nelle quali i parametri sono passati come array.

Se guardi il tip, l'intellisense dei comandi, capirai che è molto semplice e comodo.

upload_2014-8-8_16-20-5.png



Infine, potresti usare qualcosa del genere, in questo e in altri casi, in generale:

Private Query As String
Query = "SELECT * FROM TableX WHERE ...."

e poi usare il Replace per il nome della tabella:

Query = Query.Replace("TableX", NomeVeraTabella)

Insomma, usare una sorta di segnaposto e riutilizzare la Query più volte.


[P.S. Ti conviene sempre mettere il codice della query in una variabile stringa, come Query nell'esempio, così poi ti basta mettere un Log(Query) per vedere subito la magagna ;)]
 
se hai un apostrofo (es. D'ANTONIO) lo devi trasformare in doppio apostrofo nei comandi sql (es. D''ANTONIO)
 
intendi qualcosa del genere, ma non funziona da subito errore

Code:
Titolo = spnRepertorio.SelectedItem


Cursor3 = SQL1.ExecQuery2("SELECT * FROM [" & TblSpin & "] WHERE [" & GestioneTbl.ColNames(2) & "] = ?", Titolo)


Cursor3.position=0
 
Perche Titolo non lo puoi passare in quel modo, ma come array (la "foto" che ho postato è abbastanza chiara.
C'è anche qualche funzione che puoi usare o prelevare dal modulo DBUtils.

Cmq, meglio così:

Private Query As String ' <--- se metti la tua query qui, poi puoi vederla con un log!

Query = "SELECT * FROM [.... = ?"

LOG(Query) <--- ;)

Cursor3 = SQL1.ExecQuery2(Query, Array As String(Titolo))

Si usa un Array perché potresti avere più parametri:

"...WHERE Campo1 = ? AND Campo2 <> ?"

in questo caso, useresti:
Cursor3 = SQL1.ExecQuery2(Query, Array As String(Titolo, Cantante))
 
si, così funziona, ma solo per curiosità, perchè così accetta gli apostrofi e in quel modo no ?
 
Sicuramente usare ExecQuery2 come ti ha suggerito LucaMs è la cosa migliore, comunque se vuoi risolvere il problema velocemente puoi usare questa tecnica:
Code:
Cursor3 = SQL1.ExecQuery("SELECT * FROM [" & TblSpin & "] WHERE [" & GestioneTbl.ColNames(2) & "] = '" & Titolo.Replace("'","''") & "'")

Sergio
 
Back
Top