Filtrar 2 campos de access a un msflexgrid

Estoy haciendo una aplicación que me guarde y reporte datos de ventas en un bd de access, ya logre modificar algunos códigos que encontré y le añadí a mi form, ahora me suma desde el mismo flexgrid donde se muestran los datos consultados, así mismo que me muestre por selección de filtrado de acuerdo a descripción, fecha, cantidad.. Pero mi problema es que no puedo hacer que me muestre los datos consultados en el flexgrid pero condicionándome a 2 campos, mejor dicho que me filtre por fecha y descripción de artículos en simultaneo, pues si lo muestro por descripción me muestra todo lo registrado a dicha descripción pero no distingue la fecha de registro, pero si lo pongo por fecha me pone todo los artículos de esa fecha en particular y lo que deseo es poder obtener datos de por medio de descripción pero de esa fecha en particular... Toda sugerencia es bienvenida .. Llevo 2 días buscando y encontré varios métodos de como hacer pero nungino me resulto bueno ... Pata mayor información pongo el código:
Private Sub CargaGrid(XTipo As String)
On Error Resume Next
Dim MStr As String
Dim MStr2 As String
MStr = UCase(Combo1)
MStr2 = UCase(Combo2)
dia = CDate(Fecha)
Configurar_Grilla
sql = ""
sql = sql & "Select * From Ventas Where "
Select Case XTipo
Case Is = "Fecha"
sql = sql & "((InStr([Ventas].[Fecha],'" & dia & "')<>0)) "
Case Is = "Hora"
sql = sql & "((InStr([Ventas].[Hora],'" & MStr & "')<>0)) "
Case Is = "Cantidad"
sql = sql & "((InStr([Ventas].[Cantidad],'" & MStr2 & "')<>0)) "
Case Is = "Precio"
sql = sql & "((InStr([Ventas].[Precio],'" & MStr & "')<>0)) "
Case Is = "Descripcion"
sql = sql & "((InStr([Ventas].[Descripcion],'" & MStr & "')<>0)) "
Case Is = "TODOS"
sql = ""
sql = sql & "Select Ventas.Fecha,Ventas.Descripcion From Ventas WHERE "(Fecha=#" & dia & "' & " And Descripcion =' " & MStr & " ')
End Select
Set Rec = cn.Execute(sql)
If Rec.EOF = True Then
Rec.Close
Exit Sub
End If
Do While Rec.EOF = False
DoEvents
Grid1.AddItem Rec("Fecha") & vbTab & Rec("Hora") & vbTab & Rec("Cantidad") & vbTab & Rec("Descripcion") & vbTab & Rec("Precio") & vbTab & Rec("Total")
Rec.MoveNext
Loop
Rec.Close
End Sub
Private Sub Form_Load()
Configurar_Grilla
AbreBD
CargaGrid "Fecha"
MTipo = "Descripcion"
suma
End Sub
Como verán en el form_load hago la llamada al procedimiento de cargagrid dependiendo el xtipo seleccionado, pero en el de "todos" es donde tengo el problema es donde se supone hace que me filtre los 2 campos ala vez para mostrármelos al flexgrid.. Pero no me sirve así que lo quite..
Ademas no entiendo mucho de sentencias sql

1 respuesta

Respuesta
1
Haber así a bote pronto, porque sin saber los datos es complicado
1: La sentencia :
-- sql = sql & "Select Ventas.Fecha,Ventas.Descripcion From Ventas WHERE "(Fecha=#" & dia & "' & " And Descripcion =' " & MStr & " ')
dejala asi:
-- sql = "Select Fecha,Descripcion From Ventas WHERE Fecha='" & dia & "' And Descripcion ='" & MStr & "'"
Eso en lo que a gramática se refiere.(Para simplificar más que nada )
2: Lo que estas filtrando es por fecha y por descripción que quiere decir que en la base de datos la tienes que tener más de una fila que tenga la misma fecha y la misma descripción, yo lo veo absurdo, pero claro todo depende de la función del programa, o el problema que veo es que lo que quieras realmente es que el resultado tenga o la fecha o la descripción, que es más lógico, para eso as de cambiar "and" por "or" es decir:
---- sql = "Select Fecha,Descripcion From Ventas WHERE Fecha='" & dia & "' or Descripcion ='" & MStr & "'"
3: yo te aconsejo que cuando buscas descripciones en lugar de igualaralo con un (Descripcion ='" & MStr & "'") hagas un like pk asi no obligas a poner toda la descripcion exacta.
---- sql = "Select Fecha,Descripcion From Ventas WHERE Fecha='" & dia & "' or Descripcion like '%" & MStr & "%'"
No se si te he resuelto algo pero lo hemos intentado.
Venga un saludo!
Bueno al parecer no me explique bien, lo que deseo es que al consultar la tabla me muestre los datos en el flexgrid pero datos de descripción pero dependiendo de una fecha en particular, osea si pongo una fecha especifica y al seleccionar el tipo de descripción solo me muestre esa descripción de esa fecha no todas las descripciones de esa fecha ...
Para que me entiendas mejor las descripciones son todos los artículos registrados en esa fecha en particular pero si quiero consultar solo un tipo de articulo de determinada fecha entonces estaría condicionando a que me muestre solo la misma descripción (articulo x) de esa fecha y no todos los artículos de la misma fecha.
Sobre lo que mencionas de consultar por fecha o descripción independientemente pues si te fijas en le código ya esta eso solo hago la llamada de acuerdo a Xtipo.
Saludos.
Vale ya te entiendo, o eso creo, je je.
Entonces lo que entiendo es que solo quieres que te devuelva un solo resultado, o los que tengan la misma fecha y la misma descripción. ¿No?
Pues entonces la consulta esta bien, el problema es la fecha, ¿en la base de datos tienes el campo fecha en date? ¿Si es que no a que esperas a cambiarlo? Si es que si tienes que fijarte en que formato guarda la fecha si es (yyyy/mm/dd) o (dd/mm/yyyy) porque ese es el mayor problema de trabajar con date, que casi siempre esta en americano, y por eso no te lo distinge, vete directamente a tu bd con el programita access y mira la base de datos como guarda ese campo. Ami también me da mucho por culo eso.
Luego otra cosa en el programa al meterlo en el grid usas:
Grid1.AddItem Rec("Fecha") & vbTab & Rec("Hora") & vbTab & Rec("Cantidad") & vbTab & Rec("Descripcion") & vbTab & Rec("Precio") & vbTab & Rec("Total")
Ten encuenta que cuanto entras en la búsqueda de "todos" solo buscas la fecha y la descripción, es decir que cantidad, precio y demás no te saldrán reflejados, porque no se los pides.
Haber que pasa.
Bueno al parecer ya me entendiste pero no es la en la fecha el error puesto que uso un DTPicker para la fecha y esta en formato (dd/mm/yy) y lo manejo como una variable que llamo después en la sentencia sql, y usar esto:
Grid1.AddItem Rec("Fecha") & vbTab & Rec("Hora") & vbTab & Rec("Cantidad") & vbTab & Rec("Descripcion") & vbTab & Rec("Precio") & vbTab & Rec("Total")
Para mostrame todos los registros esta bien porque necesito visualizar todos los registros pero condicionándome a la descripción especifica en una fecha en particular... y de hecho me tiene que mostrar todos los registros que necesito pero con esa condición...
Y la solución estaba en corregir la sintaxis de como se debe de hacer la sentencia sql y quedo así:
Case Is = "TODOS"
sql = ""
sql = sql & "Select * From Ventas WHERE (InStr([Ventas].[Fecha],'" & dia & "')<>0)" & "And ((InStr([Ventas].[Descripcion],'" & MStr & "')<>0))"
Bueno gracias de todas maneras...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas