![]() |
Error en consulta con fecha y hora.
Hola a todos,
Veréis, tengo un problema que me trae de cabeza: En mi base de datos access tengo una tabla con campos entre los cuales tengo "Subject" (String), "Start1" (Fecha corta), "Start2" (Hora larga). Hago la siguiente consulta con un control ADOQuery: ADOQBuscar.SQL.Add('SELECT * FROM tabla'); ADOQBuscar.SQL.Add('WHERE Subject = ' + QuotedStr('texto')); ADOQBuscar.SQL.Add('AND Start1 = # + 'fecha' + '#'); ADOQBuscar.SQL.Add('AND Start2 = #' + 'hora' + '#'); El problema está en que si quito la última linea de la consulta la hace bien, pero con élla me da el siguiente error: "Parameter object is improperly defined. Inconsistent or incomplete information was provided." P.D.: El formato de 'fecha' está ya en mm/dd/yyyy. Alguien me ayuda? Muchas gracias por adelantado. |
¿Has probado a utilizar parámetros en la consulta?
Aqui tienes ejemplos de utilización: http://www.clubdelphi.com/foros/showthread.php?t=11491 http://www.clubdelphi.com/foros/showthread.php?t=10575 |
Mejor sin parámetros....
Hola Neftali, no creo que hagan faltan los parámetros, lo que no entiendo es por qué razón si lo pongo directamente en access la consulta me funciona y en Delphi no.
Alguna solucion mas? |
Cita:
En cuanto a la segunda afirmación, la razón por la que no funciona es que realmente ADO no ejecuta consultas contra Access, sino contra MS JET (que es el motor de Base de Datos que usa Access); Access no deja de ser una aplicación que trabaja con MS Jet igual que la tuya. Que tu consulta funcione en Access, no significa que deba funcionar en Delphi; Es así en el 95% de los casos, pero Access en algunos casos también hace modificaciones a la consulta antes de lanzarla contra Jet, de ahí que una SQL que en Access funcione no significa que directamente contra Jet deba funcionar. No se si me expliqué correctamente. P.D: ADO + Delphi puede funcionar en un ordenador que no tenga instalado Access, basta con que esté instalado MS Jet; Es más, debe funcionar sin Access, ya que para instalar Access se necesita "pagar" licencia de Office y para usar ADO en Delphi no se debe comprar el Office (sólo nos faltaba eso ;)...). |
Y el motivo del error?
Muchas gracias por tu respuesta, pero necesito saber el motivo de por que falla ésta consulta.
Lo que dices de que el Access "prepara" la consulta antes de lanzarla supongo que te refieres al código SQL que genera no? Pues éste código lo he copiado exactamente igual en el Delphi y no me funciona tampoco. No sé, más que nada querría saber solo el motivo por el cual no accepta la consulta. Muchas gracias. |
Mira, no tengo mucha experiencia con Access, pero siempre que lo utilicé ha sido bastante quisquilloso, y creo que podrías probrar agregando paréntesis para eliminar su confusión, pues cuando hay más de una condición en el WHERE, puede marearse. Probá así:
ADOQBuscar.SQL.Add('SELECT * FROM tabla'); ADOQBuscar.SQL.Add('WHERE (Subject = ' + QuotedStr('texto')+') '); ADOQBuscar.SQL.Add('AND (Start1 = #' + 'fecha' + '#) '); ADOQBuscar.SQL.Add('AND (Start2 = #' + 'hora' + '#)'); Ya sé que no es muy elegante hacer esto, pero recuerda que como todo producto de Mocosoft, puede tener sus mañas ;). |
Cita:
Tal vez viendola te podamos decir porqué no funciona en Delphi y qué hay que modificar para que funcione. |
Aqui está la consulta
Ésta es la consulta que genera el Access:
SELECT calendario.*, calendario.Subject, calendario.Start1, calendario.Start2 FROM calendario WHERE (((calendario.Subject)="asunto de prueba") AND ((calendario.Start1)=#1/19/2005#) AND ((calendario.Start2)=#12/30/1899 13:15:0#)); |
Coloca en Delphi en un ADOQuery la siguiente consulta SQL:
NOTA: Comillas simples en lugar de # y utiliza la fiunción TimeValue. La de Access no funciona en Delphi, en cambio (en éste caso) si pegas ésta en Access verás como sí funciona... ;) |
Lo probaré.
De acuerdo, lo probaré y os informaré del resultado.
Muchas gracias. |
Desde el dia 20 de enero 2005 estamos esperando tu respuesta para saber como resolviste este problema, tengo un problema similara y me gustaria sa ber como lo resolviste. De ya Gracias!
|
La franja horaria es GMT +2. Ahora son las 06:24:53. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi