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

Problema con filtrado

Estas en el tema de Problema con filtrado en el foro de Visual Basic clásico en Foros del Web. HOLA. TENGO UN PROBLEMA.. TENGO UN FORMULARIO REGISTRO Y OTRO FILTRO.. CUANDO ESTOY EN EL REGISTRO LLAMO AL FORMULARIO FILTRO PARA QUE ME FILTRE EN ...
  #1 (permalink)  
Antiguo 04/04/2009, 09:05
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Sonrisa Problema con filtrado

HOLA. TENGO UN PROBLEMA..

TENGO UN FORMULARIO REGISTRO Y OTRO FILTRO.. CUANDO ESTOY EN EL REGISTRO LLAMO AL FORMULARIO FILTRO PARA QUE ME FILTRE EN UN ListView..

EN EL FORMULARIO REGISTRO TENGO UN PROCEDIMIENTO QUE ES EL QUE ME CARGA LOS DATOS EN EL ListView.. LA MAYORIA HACE ESO EN UN MODULO PERO NO LO HICE ASI.. ENTONCES EN EL FORMULARIO FILTRO TENGO DOS COMBOS EN LOS CUALES EN EL COMBO1 DIRE POR QUE QUIERO FILTRAR Y EN EL CAMBO2 POR CUAL LO ORDENARE.

EN EL FORMULARIO FILTRAR TENGO LO SIGUIENTE:
Public Sub Filtrar()
Dim Campo, OrderByCampo, Orden As String
Dim SQL As String

If Combo1.ListIndex = -1 Then
Combo1.ListIndex = 0
End If
If Combo2.ListIndex = -1 Then
Combo2.ListIndex = 0
End If
If Combo1.ListIndex = 0 Then
Campo = "Codigo"
ElseIf Combo1.ListIndex = 1 Then
Campo = "Cedula"
ElseIf Combo1.ListIndex = 2 Then
Campo = "Nombre"
End If

Select Case Combo2.ListIndex
Case 0: OrderByCampo = "Codigo"
Case 1: OrderByCampo = "Cedula"
Case 2: OrderByCampo = "Nombre"
End Select


' si el recorset está abierto lo cierra
If rs.State = adStateOpen Then
rs.Close
End If

SQL = "SELECT * FROM expedientes Where " & _
Campo & " like '" & txtSearch & _
"%' order by " & OrderByCampo & " " & Orden

rs.Open SQL, nc, adOpenStatic, adLockOptimistic
'rs.Open "SELECT * FROM registro", nc, adOpenDynamic, adLockOptimistic
'**** EN ESTA LINEA ES QUE ME MUESTRA EL ERROR***********
Call CargarLista(FormRegistro.lvLista, rs)
ERROR DE COMPILACION: PROCEDIMIENTO SUB O FUNCTION NO DEFINIDO
************************************************** *********
End Sub

ESPERO ME AYUDEN..
  #2 (permalink)  
Antiguo 04/04/2009, 11:57
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Problema con filtrado

Hola, una sugerencia ¿ hace falta mostrar otro formulario para eso...? yo diria que no...le creas un panel con un frame al lado del listview o donde sea en el mismo formulario y ahi pones los filtros y un boton "Buscar" y listo... te queda todo en uno...he visto programas con mas de 20 filtros distintos en un mismo formulario y no pasa nada...

primero que nada en el codigo veo errores basicos de manual...por ejemplo al declarar las variables...

Código vb:
Ver original
  1. Dim Campo, OrderByCampo, Orden As String

ahi estas declarando 1 sola variable como string y las otra como Variant...

donde esta el procedimiento CargarLista ...??

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #3 (permalink)  
Antiguo 04/04/2009, 12:01
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: Problema con filtrado

Si la función CargarLista está en el formulario, debe ser:
Código vb:
Ver original
  1. NombreForm.CargarLista FormRegistro.lvLista, rs
Además, la función no puede ser Private
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 04/04/2009, 16:39
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

el procedimiento cargar_lista lo tengo en el formulario registro--
  #5 (permalink)  
Antiguo 04/04/2009, 16:42
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: Problema con filtrado

¿Has intentado como te indiqué?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 05/04/2009, 09:34
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

el cargar lista no esta en el formulario donde estoy haciendo el filtro. y la funcion es public
  #7 (permalink)  
Antiguo 05/04/2009, 10:42
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: Problema con filtrado

Al final quedé confundido.

En principio decías que estaba en el formulario pero ahora nos cuentas que no es así .

¿Podrías aclararnos cómo exactamente lo tienes y cómo lo estás intentando?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 05/04/2009, 11:38
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

EN EL FORMULARIO REGISTRO TENGO UN PROCEDIMIENTO QUE ES EL QUE ME CARGA LOS DATOS EN EL ListView.. y en el formulario filtrar tengo la funcion para que me filtre en el ListView que esta en el formulario registro.... siempre lo he dicho.

y............ en esta linea de codigo me muestra el error.

'**** EN ESTA LINEA ES QUE ME MUESTRA EL ERROR***********
Call CargarLista(FormRegistro.lvLista, rs)
ERROR DE COMPILACION: PROCEDIMIENTO SUB O FUNCTION NO DEFINIDO
************************************************** *********

la funcion cargar_lista este en el formulario registro.. y el ListView se llama lvLista esta en el fomulario registro tambien.. espero que ahora si me ayuden
  #9 (permalink)  
Antiguo 05/04/2009, 11:41
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: Problema con filtrado

Como te dije, si está en el formulario registro. Debe ser:
Código vb:
Ver original
  1. Call FormRegistro.CargarLista(FormRegistro.lvLista, rs)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 05/04/2009, 11:49
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Problema con filtrado

si te dice que no esta, es porque no esta... no hay otra...fijate bien el nombre de la funcion si es la misma...porque ahi pusiste cargar_lista y antes CargarLista ...que no es lo mismo...fijate bien porque es solo un error de nombre de la funcion...de ultima proba de las 2 formas y listo...y proba como te dice David que ya lo dijo 8 veces...
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #11 (permalink)  
Antiguo 05/04/2009, 11:51
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

no funciona.
  #12 (permalink)  
Antiguo 05/04/2009, 11:55
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: Problema con filtrado

Estimado, principefreddy.

Debes entender que con un simple "no funciona", no podemos deducir o adivinar cuál es el problema. Por favor, trata de explicar un poco más los errores que te da, cómo intentaste aplicar el código, y cómo tienes definida la función.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #13 (permalink)  
Antiguo 05/04/2009, 11:55
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

como dice david no me funciona.

cuando coloco FormRegistro. (no me aparece el nombre de la funcion)

y ya revice los nombres.- todo esta de manera correcta.
  #14 (permalink)  
Antiguo 05/04/2009, 11:56
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: Problema con filtrado

¿La función está definida como Public?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #15 (permalink)  
Antiguo 05/04/2009, 11:57
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

correcto. la funcion esta definida como public
  #16 (permalink)  
Antiguo 05/04/2009, 11:59
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: Problema con filtrado

¿Podrías poner el código de esa función? Así podemos ver si el error no viene de otro lado.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #17 (permalink)  
Antiguo 05/04/2009, 12:03
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

lo siguiente esta en el formulario filtrar...
Public Sub Filtrar()
Dim Campo, OrderByCampo, Orden As String
Dim SQL As String

If Combo1.ListIndex = -1 Then
Combo1.ListIndex = 0
End If
If Combo2.ListIndex = -1 Then
Combo2.ListIndex = 0
End If
If Combo1.ListIndex = 0 Then
Campo = "Codigo"
ElseIf Combo1.ListIndex = 1 Then
Campo = "Cedula"
ElseIf Combo1.ListIndex = 2 Then
Campo = "Nombre"
End If

Select Case Combo2.ListIndex
Case 0: OrderByCampo = "Codigo"
Case 1: OrderByCampo = "Cedula"
Case 2: OrderByCampo = "Nombre"
End Select


' si el recorset está abierto lo cierra
If rs.State = adStateOpen Then
rs.Close
End If

SQL = "SELECT * FROM expedientes Where " & _
Campo & " like '" & txtSearch & _
"%' order by " & OrderByCampo & " " & Orden

rs.Open SQL, nc, adOpenStatic, adLockOptimistic

'Call FormRegistro.CargarLista(FormRegistro.lvLista, rs)
'Call CargarLista(FormRegistro.lvLista, rs)

End Sub
  #18 (permalink)  
Antiguo 05/04/2009, 12:09
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: Problema con filtrado

Me refiero al código de la función CargarLista. Si podrías mostrarnos cómo la tienes, tal vez podamos ver la causa del error.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #19 (permalink)  
Antiguo 05/04/2009, 12:17
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

Private Sub Cargar_Lista()

'Esto nos permitirá acceder a las tablas y a sus registros.
Dim rs As New ADODB.Recordset
Dim iEle As Integer
rs.Open "SELECT * FROM registro", nc, adOpenDynamic, adLockOptimistic
'Ahora biene lo bueno...

'Limpiamos el objeto LISTVIEW...
lvLista.ListItems.Clear


While Not rs.EOF
'Se comporta como un archivo...
iEle = (lvLista.ListItems.Count) + 1

With lvLista

.ListItems.Add , , rs!codigo
.ListItems(iEle).SubItems(1) = rs!nacionalidad
.ListItems(iEle).SubItems(2) = rs!cedula
.ListItems(iEle).SubItems(3) = rs!Nombre
.ListItems(iEle).SubItems(4) = rs!sexo
.ListItems(iEle).SubItems(5) = rs!estadocivil
.ListItems(iEle).SubItems(6) = CLng(rs!edad)
.ListItems(iEle).SubItems(7) = rs!alias
.SelectedItem.Selected = False

End With

'Esto no debe faltar...
rs.MoveNext
'es para moverse entre los registros.

Wend

'cerramos el recurso.
rs.Close
'y lo destruimos o sacamos de la memoria...
Set rs = Nothing
End Sub
  #20 (permalink)  
Antiguo 05/04/2009, 12:55
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Problema con filtrado

Hombre...esta definida como Private !!!!!!!!!!!!!! y esta con guion bajo y antes no lo ponias asi cuando la llamabas...errores pavos..

PD: indenta un poco el codigo...
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #21 (permalink)  
Antiguo 06/04/2009, 11:35
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

despues de haber colocado la funcion que Cargar_Lista bien escrita y como public pues no me filtra todavia.

que problema.. con esta liena de codigo..

Call FormRegistro.Cargar_Lista(FormRegistro.lvLista, rs)

Última edición por principefreddy; 06/04/2009 a las 11:40
  #22 (permalink)  
Antiguo 06/04/2009, 11:41
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: Problema con filtrado

¿Te da algún error?

Además, por lo que veo, tu función Cargar_Lista no pide ningún parámetro. Mientras que estabas tratando de pasarle dos paráetros al llamarla.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #23 (permalink)  
Antiguo 06/04/2009, 13:14
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

hola david. mira he conseguido que filtrara. pero solo por una de los tres opciones que tengo en el combo. mas no logro que ordene. te paso el coodigo.

el siguiente codigo esta en el FormRegistro:
Public Sub Cargar_Lista()


'Esto nos permitirá acceder a las tablas y a sus registros.
Dim rs As New ADODB.Recordset
Dim iEle As Integer
'rs.Open "SELECT * FROM registro", nc, adOpenDynamic, adLockOptimistic
*********************** aqui es donde le digo con el where que me filtre por cedula************ ese fue todo el cambio. *****************************
rs.Open "SELECT * FROM registro Where Cedula Like '%" & FormFiltrar.txtSearch & "%'", nc, adOpenDynamic, adLockOptimistic

'Ahora biene lo bueno...

'Limpiamos el objeto LISTVIEW...
FormRegistro.lvLista.ListItems.Clear


While Not rs.EOF
'Se comporta como un archivo...
iEle = (FormRegistro.lvLista.ListItems.Count) + 1

With FormRegistro.lvLista

.ListItems.Add , , rs!codigo
.ListItems(iEle).SubItems(1) = rs!nacionalidad
.ListItems(iEle).SubItems(2) = rs!Cedula
.ListItems(iEle).SubItems(3) = rs!Nombre
.ListItems(iEle).SubItems(4) = rs!sexo
.ListItems(iEle).SubItems(5) = rs!estadocivil
.ListItems(iEle).SubItems(6) = CLng(rs!edad)
.SelectedItem.Selected = False

End With

'Esto no debe faltar...
rs.MoveNext
'es para moverse entre los registros.

Wend

'cerramos el recurso.
rs.Close
'y lo destruimos o sacamos de la memoria..
Set rs = Nothing
'End Sub
End Sub

y el siguiente codigo esta en el FormFiltrar:
Public Sub Filtrar()
Dim Campo, OrderByCampo, Orden As String
Dim SQL As String

If Combo1.ListIndex = -1 Then
Combo1.ListIndex = 0
End If
If Combo2.ListIndex = -1 Then
Combo2.ListIndex = 0
End If
If Combo1.ListIndex = 0 Then
Campo = "Codigo"
ElseIf Combo1.ListIndex = 1 Then
Campo = "Cedula"
ElseIf Combo1.ListIndex = 2 Then
Campo = "Nombre"
End If

Select Case Combo2.ListIndex
Case 0: OrderByCampo = "Codigo"
Case 1: OrderByCampo = "Cedula"
Case 2: OrderByCampo = "Nombre"
End Select


' si el recorset está abierto lo cierra
If rs.State = 1 Then
rs.Close
End If

SQL = "SELECT * FROM registro Where " & _
Campo & " like '" & txtSearch & _
"%' order by " & OrderByCampo & " " & Orden
Call FormRegistro.Cargar_Lista '(FormRegistro.lvLista, rs)
rs.Open SQL, nc, adOpenStatic, adLockOptimistic
End Sub
  #24 (permalink)  
Antiguo 06/04/2009, 21:23
Avatar de seba123neo  
Fecha de Ingreso: febrero-2007
Ubicación: Esperanza, Santa Fe
Mensajes: 1.046
Antigüedad: 17 años, 2 meses
Puntos: 19
Respuesta: Problema con filtrado

en este momente pienso un monton de cosas para hacerlo, pero para salir del paso proba pasarle como parametro la cadena de conexion y asi se conecta segun lo que vos le pases...por ejemplo(y por favor indentar el codigo y usar la etiqueta del codigo del foro!!!!!!!), mira que bueno que soy que hasta te acomode el codigo..¿no se lee mejor asi?

Código vb:
Ver original
  1. Public Sub Cargar_Lista(ByVal vSQL As String)
  2.     'Esto nos permitirá acceder a las tablas y a sus registros.
  3.    Dim rs As New ADODB.Recordset
  4.     Dim iEle As Integer
  5.    
  6.     '*********************** aqui es donde le digo con el where que me filtre por cedula************ ese fue todo el cambio. *****************************
  7.    If vSQL = "" Then
  8.         'si no hay parametro se conecta por defecto asi
  9.        rs.Open "SELECT * FROM registro Where Cedula Like '%" & FormFiltrar.txtSearch & "%'", nc, adOpenDynamic, adLockOptimistic
  10.     Else
  11.         'si hay parametro(o sea viene del formualario filtro) te conectas con la cadena que le pasaste..
  12.        rs.Open vSQL, nc, adOpenDynamic, adLockOptimistic
  13.     End If
  14.    
  15.     'Ahora biene lo bueno...
  16.    
  17.     'Limpiamos el objeto LISTVIEW...
  18.    FormRegistro.lvLista.ListItems.Clear
  19.    
  20.     While Not rs.EOF
  21.         'Se comporta como un archivo...
  22.        iEle = (FormRegistro.lvLista.ListItems.Count) + 1
  23.         With FormRegistro.lvLista
  24.             .ListItems.Add , , rs!codigo
  25.             .ListItems(iEle).SubItems(1) = rs!nacionalidad
  26.             .ListItems(iEle).SubItems(2) = rs!Cedula
  27.             .ListItems(iEle).SubItems(3) = rs!Nombre
  28.             .ListItems(iEle).SubItems(4) = rs!sexo
  29.             .ListItems(iEle).SubItems(5) = rs!estadocivil
  30.             .ListItems(iEle).SubItems(6) = CLng(rs!edad)
  31.             .SelectedItem.Selected = False
  32.         End With
  33.         'Esto no debe faltar...
  34.        rs.MoveNext
  35.         'es para moverse entre los registros.
  36.    Wend
  37.     'cerramos el recurso.
  38.    rs.Close
  39.     'y lo destruimos o sacamos de la memoria..
  40.    Set rs = Nothing
  41.     'End Sub
  42. End Sub

Código vb:
Ver original
  1. Public Sub Filtrar()
  2.     Dim Campo, OrderByCampo, Orden As String
  3.     Dim SQL As String
  4.    
  5.     If Combo1.ListIndex = -1 Then
  6.         Combo1.ListIndex = 0
  7.     End If
  8.     If Combo2.ListIndex = -1 Then
  9.         Combo2.ListIndex = 0
  10.     End If
  11.     If Combo1.ListIndex = 0 Then
  12.         Campo = "Codigo"
  13.     ElseIf Combo1.ListIndex = 1 Then
  14.         Campo = "Cedula"
  15.     ElseIf Combo1.ListIndex = 2 Then
  16.         Campo = "Nombre"
  17.     End If
  18.    
  19.     Select Case Combo2.ListIndex
  20.         Case 0: OrderByCampo = "Codigo"
  21.         Case 1: OrderByCampo = "Cedula"
  22.         Case 2: OrderByCampo = "Nombre"
  23.     End Select
  24.    
  25.     ' si el recorset está abierto lo cierra
  26.    If rs.State = 1 Then
  27.         rs.Close
  28.     End If
  29.    
  30.     SQL = "SELECT * FROM registro Where " & Campo & " like '" & txtSearch & "%' order by " & OrderByCampo & " " & Orden
  31.     Call FormRegistro.Cargar_Lista(SQL)
  32.     'rs.Open SQL, nc, adOpenStatic, adLockOptimistic
  33. End Sub

probalo...

saludos.
__________________
" Todos Somos Ignorantes; lo que pasa es que no todos ignoramos las mismas cosas " - Albert Einstein
  #25 (permalink)  
Antiguo 07/04/2009, 13:33
 
Fecha de Ingreso: julio-2008
Mensajes: 205
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con filtrado

Gracias a todos por la ayuda. seba123neo ya esta listo. funciono como queria.
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 10:12.