Duda con consulta sobre Access

25/07/2006 - 19:07 por Lope | Informe spam
Buenas.

Estoy haciendo una aplicacion con VB 2003 que trabaja sobre una base de
datos Access 2003. En un grid quiero que me muestre los registros de los
trabajadores cuyo campo "Fecha_Baja" sea mayor al día de hoy. El código
es el siguiente:


strSQLEmpleados = "SELECT Trabajadores.* FROM Trabajadores WHERE
((Trabajadores.Fecha_Baja)>"
strSQLEmpleados &= Now.Date
strSQLEmpleados &= ")"

Dim objAdaptadorDatos As New OleDbDataAdapter(strSQLEmpleados, objConx)
Dim objDS As New DataSet("Empleados")
objAdaptadorDatos.Fill(objDS, "Empleados")

...
-

Sin embargo ¡no funciona! Muestra todos los trabajadores que tienen
algún valor en el campo "Fecha_Baja" sin importarle cual sea el valor de
ese campo.

¿Alguna sugerencia?

Gracias.

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
25/07/2006 - 20:44 | Informe spam
"Lope" wrote in message
news:
Estoy haciendo una aplicacion con VB 2003 que trabaja sobre una base de
datos Access 2003. En un grid quiero que me muestre los registros de los
trabajadores cuyo campo "Fecha_Baja" sea mayor al día de hoy. El código es
el siguiente:


strSQLEmpleados = "SELECT Trabajadores.* FROM Trabajadores WHERE
((Trabajadores.Fecha_Baja)>"
strSQLEmpleados &= Now.Date strSQLEmpleados &= ")"

Dim objAdaptadorDatos As New OleDbDataAdapter(strSQLEmpleados, objConx)
Dim objDS As New DataSet("Empleados")
objAdaptadorDatos.Fill(objDS, "Empleados")

Sin embargo ¡no funciona!



El problema es que Access espera encontrarse las fechas en un formato
peculiar (creo que era algo asi como "#aa/mm/dd hh:mm#" o algo parecido).
Para no tener que preocuarse de los formatos, lo mejor es parametrizar la
sentencia:

strSQLEmpleados = "SELECT * FROM Trabajadores WHERE Fecha_Baja>?"
Dim objAdaptadorDatos As New OleDbDataAdapter(strSQLEmpleados, objConx)
objAdaptadorDatos.SelectCommand.Parameters.Add("p1", DateTime.Now)
Dim objDS As New DataSet("Empleados")
objAdaptadorDatos.Fill(objDS, "Empleados")
Respuesta Responder a este mensaje
#2 Lope
25/07/2006 - 22:59 | Informe spam
Muchas gracias Alberto.
Respuesta Responder a este mensaje
#3 Lope
26/07/2006 - 10:35 | Informe spam
Alberto Poblacion escribió:

strSQLEmpleados = "SELECT * FROM Trabajadores WHERE Fecha_Baja>?"
Dim objAdaptadorDatos As New OleDbDataAdapter(strSQLEmpleados, objConx)
objAdaptadorDatos.SelectCommand.Parameters.Add("p1", DateTime.Now)
Dim objDS As New DataSet("Empleados")
objAdaptadorDatos.Fill(objDS, "Empleados")



Sin embargo ahora al rellenar el DataSet me da un error de "No
coinciden los tipos de datos en la expresión de criterios" ¿?

He comprobado que el campo "Fecha_Baja" es de tipo Fecha/Hora.
Respuesta Responder a este mensaje
#4 Alberto Poblacion
26/07/2006 - 11:22 | Informe spam
"Lope" wrote in message
news:
strSQLEmpleados = "SELECT * FROM Trabajadores WHERE Fecha_Baja>?"
Dim objAdaptadorDatos As New OleDbDataAdapter(strSQLEmpleados, objConx)
objAdaptadorDatos.SelectCommand.Parameters.Add("p1", DateTime.Now)
Dim objDS As New DataSet("Empleados")
objAdaptadorDatos.Fill(objDS, "Empleados")



Sin embargo ahora al rellenar el DataSet me da un error de "No coinciden
los tipos de datos en la expresión de criterios" ¿?

He comprobado que el campo "Fecha_Baja" es de tipo Fecha/Hora.



El "...Parameters.Add(...)" en principio debería deducir el tipo de dato
en función del valor que le pasas. Si le estás pasando un DateTime debería
reconocerlo como Fecha/Hora. Si es necesario, puedes indicarle expresamente
el tipo de dato que debe utilizar:

Dim parm as New OleDbParameter("p1", OleDbType.DBDate)
parm.Value = DateTime.Now
objAdaptadorDatos.SelectCommand.Parameters.Add(parm)

Cuando escribas lo de OleDbType.DBDate, fíjate en el Intellisense, que te
ofrecerá otras alternativas además de DBDate para el tipo de dato, tales
como Date y DBTimeStamp. Puedes probar con todas ellas hasta encontrar la
que coincide con el tipo de dato que espera encontrarse el Access en el
campo Fecha/Hora.
Respuesta Responder a este mensaje
#5 Lope
27/07/2006 - 10:52 | Informe spam
Alberto Poblacion escribió:

El "...Parameters.Add(...)" en principio debería deducir el tipo de dato
en función del valor que le pasas. Si le estás pasando un DateTime debería
reconocerlo como Fecha/Hora. Si es necesario, puedes indicarle expresamente
el tipo de dato que debe utilizar:

Dim parm as New OleDbParameter("p1", OleDbType.DBDate)
parm.Value = DateTime.Now
objAdaptadorDatos.SelectCommand.Parameters.Add(parm)

Cuando escribas lo de OleDbType.DBDate, fíjate en el Intellisense, que te
ofrecerá otras alternativas además de DBDate para el tipo de dato, tales
como Date y DBTimeStamp. Puedes probar con todas ellas hasta encontrar la
que coincide con el tipo de dato que espera encontrarse el Access en el
campo Fecha/Hora.



Efectivamente, resuelto con esas instrucciones.

Muchísimas gracias, Alberto. :-)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida