Italian ancora problemi con le variabili in sql

3394509365

Active Member
Licensed User
Longtime User
B4X:
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?


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

B4X:
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:

LucaMs

Expert
Licensed User
Longtime User
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 ;)]
 

stefanoa

Active Member
Licensed User
Longtime User
se hai un apostrofo (es. D'ANTONIO) lo devi trasformare in doppio apostrofo nei comandi sql (es. D''ANTONIO)
 

3394509365

Active Member
Licensed User
Longtime User
intendi qualcosa del genere, ma non funziona da subito errore

B4X:
Titolo = spnRepertorio.SelectedItem


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


Cursor3.position=0
 

LucaMs

Expert
Licensed User
Longtime User
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))
 

3394509365

Active Member
Licensed User
Longtime User
si, così funziona, ma solo per curiosità, perchè così accetta gli apostrofi e in quel modo no ?
 

sirjo66

Well-Known Member
Licensed User
Longtime User
Sicuramente usare ExecQuery2 come ti ha suggerito LucaMs è la cosa migliore, comunque se vuoi risolvere il problema velocemente puoi usare questa tecnica:
B4X:
Cursor3 = SQL1.ExecQuery("SELECT * FROM [" & TblSpin & "] WHERE [" & GestioneTbl.ColNames(2) & "] = '" & Titolo.Replace("'","''") & "'")

Sergio
 
Top