Visual Basic - Between no funciona con dias menores a 10

Life is soft - evento anual de software empresarial
   
Vista:

Between no funciona con dias menores a 10

Publicado por karla (2 intervenciones) el 01/11/2010 20:33:03
espero puedan ayudarme, nunca antes he usado un foro ya que por lo general lo resuelvo leyendo casos ya existentes. mi problema es el siguiente:
tengo un boton con codigo visual en un archivo de excel para consultar datos de una base de datos de acces 2007.
espefico una fecha de inicio y una fecha final y me devuelve los datos que se encuentran dentro de ese periodo de tiempo. la consulta funciona muy bien excepto cuando pongo un numero menor a 10 en el dia de la consulta final por ejemplo. suponiendo que tengo en la base de datos un renglon con fecha 07/10/210 y pongo como fecha de inicio 02/08/2010 y fecha final 15/12/2010 me devuelve el renglon con la fecha 07/10/2010 (todo bien) pero si en la fecha final pongo 02/12/2010 no me regresa ningun dato.. supongo que es algo que tiene que ver con el cero a la izquierda pero ni idea de como resolverlo.
en la base de datos tengo la columna tipo fecha con formato dd/mm/aaaa
la version de visual es 6.3
el sig es el codigo:

Private Sub CommandButton2_Click()
Dim m_cn As ADODB.Connection
Dim sSQL As ADODB.Command
Dim m_rs As ADODB.Recordset
Set m_cn = New ADODB.Connection
Set sSQL = New ADODB.Command
Set m_rs = New ADODB.Recordset
Dim Fechai As Date
Dim Fechaf As Date

Fechai = "02/05/2010"
Fechaf = "04/12/2010"

m_cn.Open "DSN=CONSUMOS;UID=;PWD=;"
Set sSQL.ActiveConnection = m_cn

sSQL.CommandText = "select * from Combustoleo_M where fecha between " & " # " & Fechai & "# And # " & Fechaf & "#"

Set m_rs = sSQL.Execute
r = 14
While Not m_rs.EOF
For c = 1 To 22
Worksheets("Consumo Mensual").Cells(r, c) = m_rs.Fields.Item(c - 1).Value
Next
m_rs.MoveNext
r = r + 1
Wend

End Sub
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:Between no funciona con dias menores a 10

Publicado por Miguel (17 intervenciones) el 02/11/2010 11:02:55
Formatea las variables que contienen las fechas para hacer la consulta de la siguiente manera:

Format(CDate(Fechaf), "yyyyMMdd")

En la sentencia SELECT deben de llevar comillas simples.
No te recomiendo que utilices BETWEEN si no >= y <=, quedaría así.

"SELECT * FROM Combustoleo_M
WHERE fecha>='" & Format(CDate(Fechai), "yyyyMMdd") & "'
AND fecha<='" & Format(CDate(Fechaf), "yyyyMMdd") & "' "

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:Between no funciona con dias menores a 10

Publicado por karla (2 intervenciones) el 02/11/2010 16:53:22
Muchas gracias por contestar enserio.
hize lo que me dijiste pero cuando ejecuto el codigo me manda el siguiente mensaje:
-----
se ha producido el error '-2147217913 (80040e07)' en tiempo de ejecucion:
[Microsoft][Controlador ODBC Microsoft Access] No coinciden los tipos de datos en la expresion de criterios.
-----
pienso yo que es por el formato que tiene la columna fecha en la tabla de la base de datos: el formato que tengo actualmente es fecha corta dd/mm/aaaa ejemplo: 24/07/2010
asi es como estan guardados los datos en esa columna.

de nuevo muchas gracias y 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:Between no funciona con dias menores a 10

Publicado por Miguel (17 intervenciones) el 02/11/2010 18:25:26
Perdón, no había leido lo de Access, prueba así:

"SELECT * FROM Combustoleo_M
WHERE fecha>=#" & Format(CDate(Fechai), "mm/dd/yyyy") & "#
AND fecha<=#" & Format(CDate(Fechaf), "mm/dd/yyyy") & "# "

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:Between no funciona con dias menores a 10

Publicado por Jorge (55 intervenciones) el 05/11/2010 06:27:55
por eso yo prefiero trabajar las fechas como un long en forma de aaaammdd
20101007 y asi se pueden hacer todas las comparaciones y ordenaciones tranquilamente y solo para mostrarlos en pantalla se convierte en un string y se extraen los numeros 2010, 10, 07 y se les pone en la forma que uno quiera 2010/10/07.

Por eso un consejo, deja de trabajar las fechas como un campo date y olvidate del eterno problema de incompatibilidad de fecha regional.
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