Necesito introducir un consulta en MYSQL desde gambas;
Ocurre que Gambas2 me devuelve la siguiente Info:
expression too complex. too many operators, ( en español: expresión demasiado compleja. demasiados operadores)
La query es la siguiente:
conn.Exec("select id from registros where (n1=" & n1.Value & " or n1=" & n2.Value & " or n1=" & n3.Value & " or n1=" & n4.Value & " or n1=" & n5.Value & " or n1=" & n6.Value & ") and (n2=" & n1.Value & " or n2=" & n2.Value & " or n2=" & n3.Value & " or n2=" & n4.Value & " or n2=" & n5.Value & " or n2=" & n6.Value & ") and (n3=" & n1.Value & " or n3=" & n2.Value & " or n3=" & n3.Value & " or n3=" & n4.Value & " or n3=" & n5.Value & " or n3=" & n6.Value & ") and (n4=" & n1.Value & " or n4=" & n2.Value & " or n4=" & n3.Value & " or n4=" & n4.Value & " or n4=" & n5.Value & " or n4=" & n6.Value & ") and (n5=" & n1.Value & " or n5=" & n2.Value & " or n5=" & n3.Value & " or n5=" & n4.Value & " or n5=" & n5.Value & " or n5=" & n6.Value & ") and (n6=" & n1.Value & " or n6=" & n2.Value & " or n6=" & n3.Value & " or n6=" & n4.Value & " or n6=" & n5.Value & " or n6=" & n6.Value & ")")
¿Alguien conoce alguna forma para que gambas2 soporte esta operación Compleja.?
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
Re: Expresion Complicada
Sin ánimo de ofender, lo que yo veo es un mal diseño de la lógica, porque no encuentro sentido a esa expresión. ¿Podrías dar más detalles acerca de lo que realmente necesitas hacer?
Quizás exista otra forma de enfocar el problema y simplificar la consulta.
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
Registrado: Julio 2010
Mensajes: 434
Edad: 38 Ubicación: Tachira
Re: Expresion Complicada
Eso es una consulta! parece que estas tratando de consultar lo que se introduzca en las textbox y valuebox mejor dicho quieres que muchas cajas de texto se consulte una exactamente con la otra si vas a usar la sentencia "and" usa solo esa!, si vas a usar "or" es or jajajaja tienes una enzalada mal hecha, mira lo que puede estar causandote ese problema puede que sea el AND O EL OR. Mira se sabe que la sentencia AND es para decir si variable1 y variable2 son exactamente iguales hacer esto!, ahora el OR si variable1 "O" variable2 tiene esto hacer esto, osea decidete cual vas a usar vas a volver loco tu programa y otra cosa mas las VALUEBOX por causas de consulta de fecha tienen un problema tienes que hacer una conversion que esta en los foros de fechas.
PERO... tengo que decirles que esa consulta esta bien estructurada, aunque les paresa EXTRAÑA.
Este tipo de consulta es una consulta compleja también es llamada por algunos programadores
"consulta de picadillo", la cual se hace necesaria en casos muy especiales.
Les invito a consultar el manual de MYSQL sever 5.0 en la Pagina 345 donde se trata este tipo de
consulta.
EJEMPLO:
Removal of unnecessary parentheses:
((a AND b) AND c OR (((a AND b) AND (c AND d))))
-> (a AND b AND c) OR (a AND b AND c AND d)
Constant folding:
(a<b AND b=c) AND a=5
-> b>5 AND b=c AND a=5
Constant condition removal (needed because of constant folding):
(B>=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)
En mi caso enfrento un problema cuando coloco la ultima condición de la valuebox6 (n6.value).
La query funciona bien cuando solo hay 5 valuebox, pero gambas explota cuando coloco la ultima.
**Solo me interesaba saber si manipulando el codigo Fuente se podia soportar esa Consulta**
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
Re: Expresion Complicada
Lo único que se me ocurre es probar otra sintaxis de gambas, basada en la sustitución de argumentos que se pasan a la función exec. Sólo hay que tener en cuenta que a partir del décimo parámetro hay que encerrarlo entre paréntesis, lo cual no es tu caso según veo. Te pongo el código debajo con saltos de línea para que se vea más claro. Estos saltos de línea en cadenas de caracteres son perfectamente válidos en Gambas3:
conn.Exec("select id from registros where
(n1=&1 or n1=&2 or n1=&3 or n1=&4 or n1=&5 or n1=&6)
and (n2=&1 or n2=&2 or n2=&3 or n2=&4 or n2=&5 or n2=&6)
and (n3=&1 or n3=&2 or n3=&3 or n3=&4 or n3=&5 or n3=&6)
and (n4=&1 or n4=&2 or n4=&3 or n4=&4 or n4=&5 or n4=&6)
and (n5=&1 or n5=&2 or n5=&3 or n5=&4 or n5=&5 or n5=&6)
and (n6=&1 or n6=&2 or n6=&3 or n6=&4 or n6=&5 or n6=&6);",
n1.Value, n2.Value, n3.Value, n4.Value, n5.Value, n6.Value)
El símbolo &n es un comodín con un número n que corresponderá al "n" argumento:
conn.Exec("expresión de tipo string con comodines &1, &2, &n", parámetro1, parámetro2, parámetron)
A partir del décimo argumento iría entre llaves el número junto al ampersand: &{10}, &{11}, ...
Una de la mayores ventajas de usar este método es que no es necesario preocuparse de "quotear" el contenido de las variables, ya que de eso se encarga gambas. Es decir, no hace falta poner comillas para cadenas de texto, % para fechas, etc y simplifica enormemente la sintaxis evitando muchos errores con las concatenaciones y las comillas.
Como ves, mucho más elegante a la vista, aunque no se si va a funcionar en tu caso. Lo pruebas y nos dices algo
Saludos
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
Re: Expresion Complicada
No es un problema de la consulta en sí misma, es un problema de límite de veces que puedes colorar el símbolo & en una sentencia. Divídela en varias y solucionado.
dim c1,c2,c3 as string
c1="(n1=" & n1.Value & " or n1=" & n2.value & " or n1=" & n1.value & " or n1=" & n4.value & " or n1= " & n5.value & or n1=" & n6.value & ")"
c2= "and (n2= " & n1.value & " or n2=" & n2.value & .... etc.
c3= etc.etc.
conn.Exec("select id from registros where " & c1 & c2 & c3 )
Registrado: Agosto 2012
Mensajes: 12
Edad: 52 Ubicación:
Re: Expresion Complicada
Saludos, y no puedes utilizar parametros y usar procedimientos almacenados (porque veo que estas tratando de armar una consulta contra algún motor de SQL)
Yo en vb .net (estoy empezando con gambas) uso parámetros que luego se los paso al los constructores de la clase Connection.
Saludos
=================== _______________
Edward J. Ocando. | Desarrollador & DBA | SoyDesarrollador.net
Telefono. +58 (416) 164.34.88 |
"Interoperabilidad es la clave para la satisfacción del usuario final."
Fecha y hora actual: Domingo, 28 Abril 2024, 08:42 • Todas las horas son UTC + 1 Hora
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
Lista de permisos
Lista de permisos
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario