Visual Basic - Entre ambas Fechas

Life is soft - evento anual de software empresarial
 
Vista:

Entre ambas Fechas

Publicado por Myriam (7 intervenciones) el 06/06/2008 23:12:42
Mi problema es el siguiente:
Necesito mostrar en un ListView todos los campos a partir de un margen de fechas las cuales designo como inicio en un Combo1 hasta las que pongo en un Combo2.

Este es el código que tengo pero no logro hacer que me muestre todos los campos entre esas fechas que coloco en los ComboBox en el ListView

Dim tLi As ListItem
Dim rs As Recordset
Dim sBuscar As String
sBuscar = "SELECT * FROM TABLA WHERE FECHA BETWEEN' " & Combo1 & " ' AND ' " & Combo2 & " ' "
Set rs = db.OpenRecordset(sBuscar, dbOpenSnapshot)
Do While Not rs.EOF
Set tLi = ListView1.ListItems.Add(, , rs.Fields("FECHA") & "")
tLi.SubItems(1) = rs.Fields("CAMPO2") & ""
tLi.SubItems(2) = rs.Fields("CAMPO3") & ""
tLi.SubItems(3) = rs.Fields("CAMPO4") & ""
tLi.SubItems(4) = rs.Fields("CAMPO5") & ""
rs.MoveNext
Loop

Alguien me puede decir que me falta o que tengo malo??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Entre ambas Fechas

Publicado por pacopaz (173 intervenciones) el 07/06/2008 00:13:12
Suponiendo que el campo FECHA es de tipo datetime y que la base de datos es SQLSERVER, puedes tratar con lo siguiente, en sBuscar:

sBuscar = "SELECT * FROM TABLA WHERE FECHA BETWEEN Cast('" & Combo1.Text & "' as datetime) AND Cast('" & Combo2.Text & "' as datetime)"

Esto es:
1. Por que así aseguras que lo que estás enviado como parámetro se convierta realmente en un datetime y
2. Por que con el .Text de los combos, aseguras que lo que estás enviando es lo que ves en el combo y no el .Value, que, al no estar definido, lo que puede estar enviando es 1 o 2 o etc...

Espero que te funcione.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por Myriam (7 intervenciones) el 07/06/2008 00:36:02
Lo hice pero no me funciona.

Estoy trabajando con una base de datos en access y el CAST no me lo reconoce.
Los datos de fecha estan en el formato dd/mm/yyyy osea (06/06/2008), así los almacena.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por pacopaz (173 intervenciones) el 07/06/2008 00:41:51
Entonces inténtalo con lo siguiente:

sBuscar = "SELECT * FROM TABLA WHERE FECHA BETWEEN '" & Combo1.Text & "' AND '" & Combo2.Text & "'"

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por Myriam (7 intervenciones) el 07/06/2008 00:48:16
Me dice que NO COINCIDEN LOS TIPOS DE DATOS EN LA EXPRESION DE CRITERIOS.

sBuscar = "SELECT * FROM Recaudacion WHERE FechaInicio Between'" & Combo1.Text & "' AND '" & Combo2.Text & "'"
Set rs = db.OpenRecordset(sBuscar, dbOpenSnapshot)
ListView1.ListItems.Clear
Do While Not rs.EOF
Set tLi = ListView1.ListItems.Add(, , rs.Fields("FechaInicio") & "")
tLi.SubItems(1) = rs.Fields("HoraInicio") & ""
tLi.SubItems(2) = rs.Fields("FechaTermino") & ""
tLi.SubItems(3) = rs.Fields("HoraTermino") & ""
tLi.SubItems(4) = rs.Fields("TotalRecaudado") & ""
Text1.Text = rs!id
rs.MoveNext
Loop

EN LA CONSULTA LO DEPURA BIEN, PERO EN LA INSTRUCCION DE ABAJO AHÍ QUEDA Y ME MANDA ESE MENSAJE. ESTARÁ AHÍ EL PROBLEMA??

GRACIAS POR LA AYUDA QUE ME ESTAS DANDO PACOPAZ
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por pacopaz (173 intervenciones) el 07/06/2008 00:55:21
En las instrucciones de abajo tienes la misma situación que con los combos. Necesitas especificar lo que quieres que mande.
rs.Fiels(Index) te trae el campo completo, con su datatype, su tamaño, etc, por eso no lo puede pasar a string.
Para que pase, debes indicar esto:

rs.Fields([Campo]).Value
ó
CStr(rs.Fields([Campo]).Value)

donde
[Campo] es el nombre de la columna en tu tabla.

Espero que ya funcione. :)

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por Myriam (7 intervenciones) el 07/06/2008 01:11:28
NP HAY CASO, PROBE CON LO QUE ME DIJISTE Y NADA.....ALGO MAS QUE SUGERIRME??

MIRA TE VOY A MANDAR EL CODIGO COMPLETO PARA QUE LO VEAS HABER SI ENCUENTRAS ALGO.

ESTOY CONECTADA POR DAO 3.6

Option Explicit

Private db As Database
Private rs As Recordset
-------------------------------------------------

Private Sub Form_Load()
Const sPathBase As String = "F:ENTRE FECHASasedato.mdb"
Set db = OpenDatabase(sPathBase)
Set rs = db.OpenRecordset("SELECT distinct(FechaInicio) FROM Recaudacion where FechaInicio = FechaInicio", dbOpenDynaset)
With ListView1
.View = lvwReport
.GridLines = True
.LabelEdit = lvwManual
.ColumnHeaders.Add , , "Fecha Inicio", 2000
.ColumnHeaders.Add , , "Hora Inicio", 1800
.ColumnHeaders.Add , , "Fecha Termino", 2400
.ColumnHeaders.Add , , "Hora Termino", 2200, lvwColumnRight
.ColumnHeaders.Add , , "Total Recaudado", 2400, lvwColumnRight
End With
rs.MoveFirst
Do While rs.EOF = False
Combo1.AddItem (rs.Fields("FechaInicio"))
rs.MoveNext
Loop
rs.MoveFirst
Do While rs.EOF = False
Combo2.AddItem (rs.Fields("FechaInicio"))
rs.MoveNext
Loop
End Sub
---------------------------------------------------------------

Private Sub cmdBuscar_Click()
Dim tLi As ListItem
Dim rs As Recordset
Dim sBuscar As String
sBuscar = "SELECT * FROM Recaudacion WHERE FechaInicio Between'" & Combo1 & "' AND '" & Combo2 & "'"
Set rs = db.OpenRecordset(sBuscar, dbOpenSnapshot)
ListView1.ListItems.Clear
Do While Not rs.EOF
Set tLi = ListView1.ListItems.Add(, , CStr(rs.Fields("FechaInicio").Value))
tLi.SubItems(1) = CStr(rs.Fields("HoraInicio").Value)
tLi.SubItems(2) = CStr(rs.Fields("FechaTermino").Value)
tLi.SubItems(3) = CStr(rs.Fields("HoraTermino").Value)
tLi.SubItems(4) = CStr(rs.Fields("TotalRecaudado").Value)
rs.MoveNext
Loop

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por pacopaz (173 intervenciones) el 07/06/2008 01:19:49
Disculpa que te insista con lo de Combo1.Text y Combo2.Text, pero es más fiable de esa manera.

Ahora, lo que también puedes hacer es ponerle un checkpoint en la línea:
Set rs = db.OpenRecordset(sBuscar, dbOpenSnapshot)
Para que evalúes lo que trae como texto sBuscar, que pases ese texto a una consulta en tu access y cheques que te trae.
Si trae datos, entonces checa lo que hace cada línea después de eso.
Ojala que pueda funcionar. Desafortunadamente ya me tengo que ir. Suerte

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por Myriam (7 intervenciones) el 07/06/2008 01:24:07
AHORA ME FUNCIONÓ!

LA CONSULTA QUE ME HABIAS DADO ESTABA CORRECTA EL PROBLEMA ESTABA EN MI BASE DE DATOS PORQUE EL CAMPO DE ESA FECHA LO TENIA DEFINIDO COMO TIPO DE DATO FECHA/HORA Y AHORA LO PASÉ A TEXT Y ME FUNCIONÓ SUPER BIEN.

GRACIAS POR TU AYUDA, DE VERDAD TE PASASTE MUCHAS GRACIAS.
QUE TENGAS UN BUEN FIN DE SEMANA. EXITOS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Esto es un foro o un chat?

Publicado por paco (42 intervenciones) el 07/06/2008 13:10:17
para chatear quedais en un bar y os poneis moraos de tintorro!

con tanto chateo me habeis tapado mi pregunta que era muy importante!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Entre ambas Fechas

Publicado por Diego (211 intervenciones) el 07/06/2008 20:44:41
Hola
La propuesta de pacopaz esta bien y llena de buena voluntad, pero a mi tampoco me funciona, y a Myriam le sabe mal seguir dando la brasa pero creo que tampoco le funciona porque no es posible que funcione tal como esta redactada.
Sin animos de molestar a nadie, y mucho menos a alguien que ha dado varias respuestas cosa poco habitual, de la unica manera que he conseguido que funcione es de la siguiente forma.

combo1 = "#" & Format(combo1, "mm/dd/yy") & "#"
combo2 = "#" & Format(combo2, "mm/dd/yy") & "#"
sbuscar = "SELECT * FROM TABLA WHERE FECHA BETWEEN "
sbuscar = sbuscar & combo1 & " AND " & combo2

Se podria haber escrito en una linea, pero asi se ve mejor.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar