Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Expresion Complicada
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Expresion Complicada 
 
Hola Colegas.

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.?

Gracias
 



 
alessandri - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
jousseph - Ver perfil del usuarioEnviar mensaje privadoVer la galería personal del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Expresion Complicada 
 
Gracias por sus respuestas.

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**

Gracias.
 



 
alessandri - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 )


Ya nos cuentas.

Suerte
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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."
 
Edward - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Error "Bad Character Constant In Stri... destroyer General 2 Domingo, 06 Marzo 2011, 09:15 Ver último mensaje
destroyer
No hay nuevos mensajes Expresion Regular. Cuestión Shell General 3 Martes, 10 Marzo 2015, 22:01 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
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



  

 

cron