Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: FreddyJ en Julio 08, 2010, 08:59:16 pm
-
Hola. Me ha surgido un problema que no se como solucionar, no veo donde está el error.
Comienzo por decir que tengo una tabla que se llama detallesfactura la cual tiene los siguientes campos. (def_facturanum, def_decripcion, def_cantidad, def_preciouni, def_totalitem, def_iva, def_fecha) y una que se llama facturas con los siguientes campos.
http://www.imaxenes.com/imagen/img_factura1cs12zo.jpg.html Continuo. Esas tablas estan relacionadas por los dos primeros campos de cada tabla.
Ahora bien. tengo este formulario. http://www.imaxenes.com/imagen/listado_procesadas1ry38lg.jpg.html Bien en esta imagen estoy mostrando datos de ambas tablas, pero resulta que cuando selecciono una fecha sea cual sea, se muestran todos los datos. No me esta filtrando como debe ser.
Aqui los codigos. Esto es para cargar las fechas en un contro de usuario que cree.
Private Sub Cargar_fechas()
Dim rs As New ADODB.Recordset
Call cSel1.Clear
rs.Open "SELECT DISTINCT fac_fechafact FROM facturas ORDER BY fac_fechafact DESC", nc, adOpenDynamic, adLockOptimistic
While Not rs.EOF
Call cSel1.AddItem(rs!fac_fechafact & " " & Format(rs!fac_fechafact, "long date"))
DoEvents
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
cSel1.DefaultItem = 0
End Sub
Y esta es la funcion que me hace todo el proceso, que se muestra los datos que quiero.
Private Sub Cargar_Listado_fechas(Optional lpFecha As String)
Dim cItem As ListItem
Dim rs As New ADODB.Recordset
Dim sQuery As String
Call lv.ListItems.Clear
If (IsDate(lpFecha)) Then
sQuery = "SELECT DISTINCT detallesfactura.def_decripcion, detallesfactura.def_cantidad, detallesfactura.def_totalitem, facturas.fac_codigo, facturas.fac_fechafact, facturas.fac_nombre FROM detallesfactura, facturas WHERE facturas.fac_condicion= 1 AND facturas.fac_fechafact = #" & Format(lpFecha, "mm/dd/yyyy") & "# ORDER BY facturas.fac_fechafact DESC"
Else
sQuery = "SELECT DISTINCT detallesfactura.def_decripcion, detallesfactura.def_cantidad, detallesfactura.def_totalitem, facturas.fac_codigo, facturas.fac_fechafact, facturas.fac_nombre FROM detallesfactura, facturas ORDER BY facturas.fac_fechafact DESC"
End If
On Error Resume Next
rs.Open sQuery, nc, adOpenDynamic, adLockOptimistic
While Not rs.EOF
Set cItem = lv.ListItems.Add(, , Format(rs!fac_codigo, "0000000"))
cItem.SubItems(1) = (rs!fac_fechafact)
cItem.SubItems(2) = (rs!fac_nombre)
cItem.SubItems(3) = (rs!def_decripcion)
cItem.SubItems(4) = (rs!def_cantidad)
cItem.SubItems(5) = (rs!def_totalitem)
DoEvents
rs.MoveNext
Wend
rs.Close
Set rs = Nothing
End Sub
Asi es ocmo llamo y muestro , apenas selecciono la fecha en el combo que lo cree como contro de usuario.
Private Sub cSel1_ItemClick(ByVal lpText As String, ByVal lpIndex As Long)
Call Cargar_Listado_fechas(Left(lpText, 10))
End Sub
Necesito que me ayuden a ver el error para que me filtre bien, por que si se dan cta en las imagenes muestra por ejemplo en la fecha 8 me ca,bia todos los registros a esa fecha y al igual que la 4 de julio. Gracias.
-
Mira como estas usando access, creo que lo mas conveniente es hacer una consulta dentro de la bae de datos, para despues llamarla por el filtrado de fechas que ya tienes, ademas creo que el error es que no estas poniendo el campo relacionado, te voy a poner el ejemplo de como hacer las consultas para poder filtrarlas despues:
ya habiendo hecho tu consulta en access solo filtras la consulta
Dim rs As New ADODB.Recordset
rs = "select * from consulta"
rs.filter = "campo = '" & objeto.text & "'"
call cargardatos
yo asi lo hago y me evito de tanto codigo sql y si quieres filtrar por mas de un campo
Dim rs As New ADODB.Recordset
rs = "select * from consulta"
rs.filter = "campo1 = '" & objeto1.text & "' and campo2 = '" & objeto2.text & "'"
call cargardatos
-
tambien te dejo un enlace para que leas hacerca de las consultas
http://www.aulaclic.es/sql/t_3_1.htm