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

Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Estas en el tema de Aplicar rs.filter dependiendo si un textbox esta vacio ó no en el foro de Visual Basic clásico en Foros del Web. El problema biene en la instruccion sql en la clausula AND Por ejemplo el ContentSQL supuestamente empieza con WHERE y no podria ser WHERE AND ...
  #1 (permalink)  
Antiguo 20/03/2009, 13:55
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Aplicar rs.filter dependiendo si un textbox esta vacio ó no

El problema biene en la instruccion sql en la clausula AND
Por ejemplo el ContentSQL supuestamente empieza con WHERE y no podria ser WHERE AND en caso uno de los text no este vacio y se genera un error.
No se como explicarlo mejor?, espero que al ver el codigo se den cuentadel problema, como lo soluciono?

Código:
Dim ContentSQL As String
'.....
'.......

If Not Text1.Text = "" Then
   'Aplicamos filtro
   ContentSQL = ContentSQL & " AND codcat='" & Text1 & "'"
End If

If Not Text2.Text = "" Then
   'Aplicamos filtro
   ContentSQL = ContentSQL & " AND codmarca='" & Text2 & "'"
End If

rsProd.Filter = ContentSQL
  #2 (permalink)  
Antiguo 20/03/2009, 14:13
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Una forma sería tener toda la parte del WHERE en una variable separada del resto de la consulta (ya que es básicamente la parte "modificable" de la consulta), así, al momento de añadir una nueva condición compruebas, si la variable está vacía, no agregar "AND", si lo está, agregar "AND".

Espero hayas entendido la idea .
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 20/03/2009, 15:09
Avatar de totigo  
Fecha de Ingreso: marzo-2007
Ubicación: America
Mensajes: 103
Antigüedad: 17 años, 2 meses
Puntos: 3
De acuerdo Respuesta: Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Hola!

Lo que comenta David es valido, te lo complemento de la siguiente manera:

Usando el WHERE 1=1, lo cual siempre será valido! y vas agregando cada uno de los filtros que vayan cumpliendo con cada una de las condiciones!, espero haber sido claro!!

Código vb:
Ver original
  1. ContentSQL = "SELECT nomProducto FROM Productos WHERE 1=1 "
  2.  
  3. If Len(Text1.Text) > 0 Then
  4.    'Aplicamos filtro
  5.   ContentSQL = ContentSQL & " AND codcat='" & Text1 & "'"
  6. End If
  7.  
  8. If Len(Text2.Text) = "" Then
  9.    'Aplicamos filtro
  10.   ContentSQL = ContentSQL & " AND codmarca='" & Text2 & "'"
  11. End If
  #4 (permalink)  
Antiguo 20/03/2009, 15:26
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Totigo parece que vb6.0 no admite eso, hize la consulta directamente a la bd y corre perfecto lo hago desde vb6.0 y me dice: argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros, estoy usando la propiedad filter de recordset, alguna otra solucion?

david no entendi bien lo que comentaste pero tratare de hacerlo

saludos
  #5 (permalink)  
Antiguo 20/03/2009, 15:58
Avatar de totigo  
Fecha de Ingreso: marzo-2007
Ubicación: America
Mensajes: 103
Antigüedad: 17 años, 2 meses
Puntos: 3
Respuesta: Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Comprendo!, es por lo que estas usando el rs.filter

Funcionaria si usaras rs.open ContentSQL, adbConection, adOpenStatic
  #6 (permalink)  
Antiguo 20/03/2009, 16:16
Avatar de totigo  
Fecha de Ingreso: marzo-2007
Ubicación: America
Mensajes: 103
Antigüedad: 17 años, 2 meses
Puntos: 3
De acuerdo Respuesta: Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Ok! a ver si este te sirve!

'Si ya hay un filtro agregas el AND
If Len(ContentSQL) > 0 Then ContentSQL = ContentSQL & " AND "

Código VB:
Ver original
  1. ContentSQL = ""
  2.  
  3. If Len(Text1.Text) > 0 Then
  4.    'Aplicamos filtro
  5.   ContentSQL = ContentSQL & " codcat='" & Text1 & "'"
  6. End If
  7.  
  8. If Len(Text2.Text) >0 Then
  9.     'Si ya hay un filtro agregas el AND
  10.    If Len(ContentSQL) > 0 Then ContentSQL = ContentSQL & " AND "
  11.    
  12.    'Aplicamos filtro
  13.   ContentSQL = ContentSQL & " codmarca='" & Text2 & "'"
  14. End If
  15.  
  16.  
  17. If Not rsProd.EOF Then
  18.     rsProd.Filter = ContentSQL
  19. End If
  #7 (permalink)  
Antiguo 20/03/2009, 19:09
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: Aplicar rs.filter dependiendo si un textbox esta vacio ó no

Funciono al 100% tio

saludos
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 20:06.