Spanish Como pasar dos o más argumentos de selección en una consulta SQL

ivanguerr

Banned
No encuentro la sintaxis exacta para realizar una consulta con dos parámetros en el apartado WHERE

1 Parámentro:

B4X:
Cursor1= SQL1.ExecQuery("SELECT * from obj WHERE nombre = " & "'" & strOBJ_EXAM & "'")

2 parámetros:

B4X:
Cursor1= SQL1.ExecQuery("SELECT * from obj WHERE nombre = " & "'" & strOBJ_EXAM & "'" and edad = " & "'" & intEDAD & "'")


¿Cómo se haría si aparte del nombre necesito que se cumpla el requisito de la edad?



Saludos
 

jota

Active Member
Licensed User
Longtime User
Ten en cuenta que sqllite es case sensitive asi que debes escribir los nombres de los campos exactamente igual que en la DB.

Yo encuentro bien la sistaxis si intEDAD es un string, por otro lado te recomiendo esta otra opción para no liarte con comillas simples,dobles, ampersand etc...
Cursor1 = SQL1.ExecQuery2("SELECT * from obj WHERE nombre = ? AND edad = ?", Array As String(strOBJ_EXAM,intEDAD))
 

ivanguerr

Banned
IntEDAD es un integer. Tal como lo he puesto no está bien escrito, fíjate los colores con los que formatea el texto.
Creo que es una cuestión de sintaxis, he probado con tildes, comas, paréntesis... No doy con la solución.

Saludos.
 

jota

Active Member
Licensed User
Longtime User
Buenas, se que esta mal escrito de hecho te faltan el ampersan y las comillas en and edad = y tampoco se ponen valores numericos entre comillas, la cadena correcta te la da Klaus, pero de todas formas te sigo recomendando el SQL1.ExecQuery2 Y sql1.ExecNonQuery2 para evitar problemas como que un usuario te inserte comillas en campo de texto y provoque un fallo o tan simple como poder olvidarte de poner comillas y concatenar largas cadenas de texto SQL en tu codigo, que cuando tienes muchos campos y condiciones pueden ser estructuras desquiciantes. ;) Saludos

Cursor1 = SQL1.ExecQuery2("SELECT * from obj WHERE nombre = ? AND edad = ?", Array As String(strOBJ_EXAM,intEDAD))
 

ivanguerr

Banned
Buenas, se que esta mal escrito de hecho te faltan el ampersan y las comillas en and edad = y tampoco se ponen valores numericos entre comillas, la cadena correcta te la da Klaus, pero de todas formas te sigo recomendando el SQL1.ExecQuery2 Y sql1.ExecNonQuery2 para evitar problemas como que un usuario te inserte comillas en campo de texto y provoque un fallo o tan simple como poder olvidarte de poner comillas y concatenar largas cadenas de texto SQL en tu codigo, que cuando tienes muchos campos y condiciones pueden ser estructuras desquiciantes. ;) Saludos


Entiendo tu razonamiento y es más sencillo pasar un array pero siempre que los dos argumentos a comprobar sean del mismo tipo. En mi caso, por un lado se ha de cumplir una comparación 'string' y una segunda comparación 'integer', por tanto (que yo sepa) no se puede pasar por array y he de optar por la opción de Klaus.

Lo de las comillas no lo había pensado :sign0142:


Saludos.
 

jota

Active Member
Licensed User
Longtime User
Puedes pasar un valor string y otro int sin problemas, prueba el ejemplo que te he puesto para comprobarlo. Saludos
 
Top