Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Where ... And ... Or

Estas en el tema de Where ... And ... Or en el foro de Visual Basic clásico en Foros del Web. Hola amigos Bien, tengo mis problemillas con una instrucción SQL que se le pasa a un objeto ADO. No tengo claro cual es la cadena ...
  #1 (permalink)  
Antiguo 06/07/2005, 08:09
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Where ... And ... Or

Hola amigos

Bien, tengo mis problemillas con una instrucción SQL que se le pasa a un objeto ADO. No tengo claro cual es la cadena que debo pasarle, de hecho, no me funciona correctamente.

Premisas:
-VarA (String para el campo1)
-VarB (String para el campo2)
-VarC (String para el campo2)

Supongamos que el campo1 puede tener muchos valores, entre ellos, el que se encuentra en VarA, y que el campo2 puede tener muchos valores, entre ellos, los que se encuentran en VarB y VarC.

Bien, lo que necesito es que el listado me recupere el recordset en el que se cumpla cualquiera de estos casos:
Campo1=VarA and Campo2=VarB (True)
Campo1=VarA and Campo2=VarC (True)

Estoy poniendo lo siguiente:

Adodc.recordsource = "... where Campo1='" & VarA & "' and Campo2='" & VarB & "' or Campo2='" & VarC & "'"

Pero, evidentemente, estoy poniendo mal la sentencia, pues no me da el resultado correcto...

... alguna ayuda? Gracias
  #2 (permalink)  
Antiguo 06/07/2005, 08:45
 
Fecha de Ingreso: junio-2005
Mensajes: 63
Antigüedad: 18 años, 10 meses
Puntos: 0
tal vez asi?
Código:
Adodc.recordsource = "... where Campo1='" & VarA & "' and (Campo2='" & VarB & "' or Campo2='" & VarC & "')"
  #3 (permalink)  
Antiguo 06/07/2005, 09:03
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Gracias sonyweb,

Después de postear el texto aqui ya había pensado en los paréntesis que definen el orden de prioridad en matemáticas.

He probado la variante que planteas, pero no me funciona...

... aunque si me funciona la siguiente:

Adodc.recordsource = "... where Campo1='" & VarA & "' and Campo2='" & VarB & "' or Campo1='" & VarA & "' and Campo2='" & VarC & "'"

Lo cual no me resulta demasiado lógico, pero como no tengo demasiada experiencia en el tema... mejor lo dejo asi.

Gracias
Gracias
  #4 (permalink)  
Antiguo 06/07/2005, 12:13
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Eje!!! atenti compañeros que aqui tengo la solucion del select...


"... where Campo1='" & VarA & "' and Campo2 in('" & VarB & "','" & VarC & "')"

Eso se resuelve facilmente con un in
  #5 (permalink)  
Antiguo 07/07/2005, 02:33
jorevale
Invitado
 
Mensajes: n/a
Puntos:
En diseño, si, en ejecución, no

Hola amigos

Evidentemente la solución de developer funciona perfectamente. Sin embargo, también evidentemente estoy concatenando mal las cadenas, porque... explico con datos reales

Si en tiempo de diseño pongo esto en el origen de registro del adodc, funciona perfectamente:
select * from AVISOS where INCIDENCIAS in('ESPERA','P.PAGO','P.GESTIONAR') or (INCIDENCIAS='HECHO' and PORCIENTO=0) order by OPERARIOS & FEC_ENT

Lease:
VInc1='ESPERA'
VInc2='P.PAGO'
VInc3='P.GESTIONAR'
VInc4='HECHO'
VPor=0

El problema viene en que en tiempo de ejecución necesito cargarle otra variable al recordset para hacer un filtro, y cuando trato de concatenar la cadena no me sale bien. Esto es lo que hago en ejecución:

Adodc_Ruta.RecordSource = "select * from AVISOS where INCIDENCIAS in & '(' & '" & VInc1 & "' & ',' & '" & VInc2 & "' & ',' & '" & VInc3 & "' & ')' & or & '(' & INCIDENCIAS='" & VInc4 & "' and PORCIENTO='" & VPor & "' & ')' & order by OPERARIOS & FEC_ENT"

A propósito, una instrucción tan larga convendría hacer el salto de línea para no tener que estar desplazando la pantalla hacia la derecha, pero tampoco me funciona el &_

Cualquier ayuda sería muy apreciada

Gracias
  #6 (permalink)  
Antiguo 07/07/2005, 02:49
 
Fecha de Ingreso: mayo-2005
Mensajes: 93
Antigüedad: 19 años
Puntos: 1
Lo siento pero no entiendo el porqué no te funciona, igual es que ando un poco petado de código. Lo siento

&_ claro que no te funciona!!!!!!
& _ TE FALTA EL ESPACIO ENTRE EL & Y EL _
__________________
No te hubieran dado la capacidad de soñar sin darte también la posibilidad de convertir tus sueños en realidad
  #7 (permalink)  
Antiguo 07/07/2005, 02:54
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Correcto con lo del final de línea

Estoy tratando de simplificar la expresión en ejecución para que funcione el error que me da dice que falta el paréntesis en el IN

Cuando lo logre le volveré a incorporar todo lo demás y ya os lo comunicaré

Gracias
  #8 (permalink)  
Antiguo 07/07/2005, 03:30
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Parcialmente logrado

Ya funciona parcialmente con:

Adodc_Ruta.RecordSource = "select * from AVISOS where INCIDENCIAS in('" & VInc1 & "' & ',' & '" & VInc2 & "' & ',' & '" & VInc3 & "')"

Incorporo el resto...
  #9 (permalink)  
Antiguo 07/07/2005, 04:15
jorevale
Invitado
 
Mensajes: n/a
Puntos:
De acuerdo Ya está



Bueno, he simplificado, dejando solo la variable que el usuario realmente modifica en ejecución (VOpe). El problema de los paréntesis, resuelto. Funciona con esto:

Adodc_Ruta.RecordSource = "select * from AVISOS where (OPERARIOS='" & VOpe & "' and INCIDENCIAS in('ESPERA','P.PAGO','P.GESTIONAR')) or (OPERARIOS='" & VOpe & "' and (INCIDENCIAS='HECHO' and PORCIENTO=0)) order by OPERARIOS & INCIDENCIAS & FEC_ENT"

Gracias a todos por su colaboración...
  #10 (permalink)  
Antiguo 07/07/2005, 04:35
jorevale
Invitado
 
Mensajes: n/a
Puntos:
Con lo cual...

...llego a la conclusión de que en ejecución (a pesar de que participen variables en la sentencia)... no es necesario concatenar los paréntesis al pasarle el recordsource al adodc...

...lo cual debía haber pensado desde un principio...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:05.