Como decía Nicolas Cage en La Roca: ¿Podría alguien explicarme, por los
testiculos del minotauro...
... cual es la manera correcta de filtrar fechas en un DataSet o Datatable?
Utilizando el operador .Select en una tabla de un Dataset o un Datatable me
encuentro que las fechas las tengo que introducir entre comillas simples y
las horas entre #. Si pongo las fechas entre # me dice que 'no se puede
reconocer la cadena como un DateTime válido', pero si pongo las comillas a
veces me devuelve registros y a veces no, es una lotería.
Esto me funciona en tres DataSet y misteriosamente no en otro que tiene la
misma estructura:
- Todos los DataSets se han cargado desde tablas de Access 2000.
- OleDBConnection y OleDBDataAdapter son iguales, básicamente cortar y
pegar cambiando nombres de fichero y tablas.
- Las campos son tipo FechaHora sin formato
- Si inspecciono la variable SQLFechaHoraActivo y pego la consulta en
Access sólo tengo que cambiar las comillas por # para que funcione.
Dim SQLFechaHoraActivo As String = " AND Activo = True AND
(FechaActivacion Is Null OR FechaActivacion < '" & Now.ToString("dd/MM/yyyy")
& "') AND (FechaFinalizacion Is Null OR FechaFinalizacion > '" &
Now.ToString("dd/MM/yyyy") & "') AND (HoraActivacion Is Null OR
HoraActivacion < #" & Now.ToString("hh:mm:ss") & "#) AND (HoraFinalizacion Is
Null OR HoraFinalizacion > #" & Now.ToString("hh:mm:ss") & "#)"
'La consulta queda así: " AND Activo = True AND (FechaActivacion Is Null OR
FechaActivacion < '31/8/2006') AND (FechaFinalizacion Is Null OR
FechaFinalizacion > '31/8/2006') AND (HoraActivacion Is Null OR
HoraActivacion < #04:21:26#) AND (HoraFinalizacion Is Null OR
HoraFinalizacion > #04:21:26#)"
DataAdapter = New OleDbDataAdapter("SELECT * FROM Tabla", Conexion)
'Estos DataSets sólo los tengo que leer, así que pongo la tabla en el
DataAdapter.Fill y no en DataAdapter.TableMappings.
DataAdapter.Fill(MiDS, "Tabla")
Dim dr() As DataRow = MiDS.Tables("Tabla").Select("Codigo = '" & Codigo &
"'" & SQLFechaHoraActivo, "Codigo")
Da igual como calcule la fecha actual, si la pongo entre # me dice que no es
un formato DateTime válido y si no recuerdo mal he probado todas estas:
Now.Date
Now.Date.ToString
Now.ToString("dd/MM/yyyy")
Format(Now,"dd/MM/yyyy")
Format(Now.Date,"dd/MM/yyyy")
CDate(Now.ToString("dd/MM/yyyy"))
CType(Now.ToString("dd/MM/yyyy"), Date)
Leer las respuestas