Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Consulta between con datetimepicker (https://www.clubdelphi.com/foros/showthread.php?t=16076)

Dantael 14-11-2004 17:02:39

Consulta between con datetimepicker
 
Hola, estoy haciendo una consulta con un query en delphi 5 el problema es que estoy tomando valores de 2 datetimepicker y cuando lo hago no me devuelve ningún valor si las 2 fechas son iguales me devuelve un dato, pero yo quiero que me devuelva un rango (todas las tuplas entre las dos fechas que le puse), aquí esta el código:
query1.SQL.clear;
query1.sql.add('Select Fecha_exp, Fecha_venc, Nombre_cliente, Numero_saldo,');
query1.sql.add('Placas from Fechas where Fecha_exp between :param0 and :param1');
Query1.Params[0].AsDate:= datetimepicker1.date;
Query1.Params[1].AsDate:= datetimepicker1.date;
query1.open;
no hace lo que debería si selecciono 11/11/2004 y 18/11/2004 no me devuelve los datos aunque tengo varias fechas 13/11/2004 o entre el rango de las 2 primeras, ahhh pero si el primer date time picker es igual a la fecha que busco me devuelve un campo :confused: si alguién pudiera ayudarme se lo agradezco de antemano.
Saludos

Encontre esto en los foros en respuesta a otro usuario con una duda similar

Cita:

Empezado por marcoszorrilla
La solución ya te la ha dado Rubén, pero quiero hacer una observación, si tienes en la tabla fechas de años distintos, no obtendrás el mes del año actual, sino todos los meses 8 por ejemplo que existan en la tabla, si ocurre este caso que estoy citando, tendrías que filtrar entre el 1 del mes solicitado y el final del mes del mismo, que solamente tendrías que hallarlo, entonces quedaría el filtro de las fechas:
Where MiFecha Between xxx And xxx.


Un Saludo.


Lepe 14-11-2004 19:20:10

No comentas el tipo de tablas ni el SGBBDD, así a voz de pronto te diría que cambies los parámetros a Tipo String, y al tiempo de dar las fechas a la consulta:

Código Delphi [-]
   FormatDateTime('mm/dd/yyyy', datetimepicker1.date);

Saludos

marcoszorrilla 14-11-2004 21:32:18

En algunos casos es necesario esto otro:
Código Delphi [-]
QuotedStr(FormatDateTime('mm/dd/yyyy', datetimepicker1.date));

Un Saludo.

Dantael 15-11-2004 06:28:55

No se pudo
 
Gracias por su pronta respuesta, la base de datos esta hecha en paradox uso un alias llamado Aserradero, un componente query un dbgrid y la fecha no es la llave primaria, ya puse las dos opciones que me indican pero no funciona manda un mensaje de error "EDbEngineError with message type msmatch in expresion" y no me arroja ningún resultado con los dos métodos que me dieron. Les agradezco por sus respuestas y les agradecería si me pudieran ayudar o dar referencia ya que me he pelado ya 2 días con esa consulta sin avance alguno.

Saludos

Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
begin


query1.SQL.clear;
query1.sql.add('Select Fecha_exp, Fecha_venc, Nombre_cliente, Numero_saldo,');
query1.sql.add('Placas from  Fechas where Fecha_exp between :param0 and :param1');

Query1.Params[0].Asstring:= QuotedStr(FormatDateTime('mm/dd/yyyy', datetimepicker1.date));
Query1.Params[1].Asstring:= QuotedStr(FormatDateTime('mm/dd/yyyy', datetimepicker2.date));
query1.open;

end;

Lepe 15-11-2004 14:37:35

Pues yo no veo error en ese código.

Lo único que queda es revisar los parametros del query, que DataType = ftString y ParamType = ptInput.

Espero que haya suerte.

frudolph 15-11-2004 17:49:13

Observá que la línea:

--> Query1.Params[1].AsDate:= datetimepicker1.date;

Debería decir:

--> Query1.Params[1].AsDate:= datetimepicker2.date;

Sino, estás pasándole la misma fecha a ambos parámetros, y de ahí el error.

Dantael 15-11-2004 18:21:09

y sigue sin quedar!
 
Cita:

Empezado por Lepe
Pues yo no veo error en ese código.

Lo único que queda es revisar los parametros del query, que DataType = ftString y ParamType = ptInput.

Espero que haya suerte.

Hola y como hago para checar eso? :eek: lo que hice fue lo siguiente
Código Delphi [-]
Query1.Params[0].value:= QuotedStr(FormatDateTime('mm/dd/yyyy', datetimepicker1.date));
Query1.Params[1].value:= QuotedStr(FormatDateTime('mm/dd/yyyy', datetimepicker2.date));
Pero me sigue mandando el error de type mismatch
Muchisimas gracias por su ayuda!

roman 15-11-2004 19:59:50

A mi me parece que se están complicando la vida. No hace falta ni el FormatDateTime ni el QuotedStr por la sencilla razón de que los parámetros se están pasando con AsDate. El método AsDate hará la traducción que sea necesaria.

Dicho de otra forma, tal como estaba originalmente:

Cita:

Empezado por Dantael
Código Delphi [-]
Query1.Params[0].AsDate:= datetimepicker1.date;
Query1.Params[1].AsDate:= datetimepicker1.date;

estaba bien.

El único problema aquí es el que ya mencionó frudolph, estás usando el mismo DateTimePicker en ambos parámetros.

// Saludos

Dantael 15-11-2004 20:34:41

Así es
 
Como veras en los ejemplos anteriores corregi el problema de los datetimepicker1 y 2 pero aun así no hace la busqueda con el between no lme devuelve ningún campo. :confused:

roman 15-11-2004 20:43:57

Cita:

Empezado por Dantael
Como veras en los ejemplos anteriores correji el problema de los datetimepicker1 y 2

Sí vi que lo corregiste pero con el uso de QuotedStr y/o FormatDateTime, que, como ya viste, no te sirven. ¿Lo has hecho con tu código original?

Por otra parte, ¿has probado hacer una prueba usando valores específicos en lugar de parámetros? De ser así, ¿te devuelve los resultados esperados?

Si te sigue fallando podrías preparar una muestra de tus datos y mandarla al foro como attachment (creo que el límite son 16kb). La muestra debe contener datos con los que se reproduzca la situación que estás enfrentando.

// Saludos

Dantael 15-11-2004 21:24:26

Por fin
 
Muchas Gracias a todos por su ayuda encontre la solución lo hace a la perfección de esta forma:
:D
Código Delphi [-]
query1.ParamByName('param0').Asdate := datetimepicker1.date;
query1.ParamByName('param1').Asdate := datetimepicker2.date;

como lo dice la ayuda de delphi utiliza parambyname para usar información en especifíco de un parámetro especifíco basado en su nombre. :D


La franja horaria es GMT +2. Ahora son las 08:01:54.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi