PDA

Ver la Versión Completa : Delphi, Acces, Fechas y SQL


cepriego
20-03-2005, 03:22:27
Hola qué tal a todos.

Tengo el siguiente problema, espero alguien pueda ayudarme. Tengo una base de datos Access a la cual accedo desde delphi perfectamente; sin embargo, cuando trato de hacer consultas sql que impliquen el uso de FECHAS todo se vuelve un desastre.

Intento realizar una busqueda entre un rango de fechas y no me devuelve ningun resultado. Por ejemplo

Intente con esto:
SELECT * FROM PROYECTOS WHERE FECHAINICIO BETWEEN #31/08/2004# AND #09/09/2004#

con esto
SELECT * FROM PROYECTOS WHERE FECHAINICIO BETWEEN '31/08/2004' AND '09/09/2004'

Igual las combine y nada.

Alguien sabe como puedo solucionar esto. En ocasiones si me devuelve datos pero son erróneos.

Desde ya agradezco todas sus respuestas:cool:

marcoszorrilla
20-03-2005, 10:39:50
En SQL el formato de fechas es mm/dd/yyyyy. Si utilizas parámetros te ahorras este problema.

Un Saludo.

cepriego
20-03-2005, 20:22:30
Pues mira, ya he intentado igualmente con el formato "mm/dd/yyyy" y no me funciona.

En SQL el formato de fechas es mm/dd/yyyyy. Si utilizas parámetros te ahorras este problema.


Un Saludo.

marcoszorrilla
21-03-2005, 14:52:56
He creado el siguiente ejemplo conectándome con ADO y funciona sin ningún problema.

procedure TForm1.Button1Click(Sender: TObject);
begin
With Adoquery1 do
begin
Close;
Sql.Clear;
Sql.Add('Select * From [Cursos Academia] ');
Sql.Add('Where Inicio between #10/01/2002# and #12/31/2002#');
Sql.Add('Order by Inicio');
ShowMessage(Sql.Text);
open;
end;
end;


Un Saludo.

lroblesco
26-03-2005, 07:37:57
Como ha dicho Marcos el formato es #mm/dd/yyyy#. Yo he usado la misma sentencia y me ha funcionado. Con la aclaracion de que el campo fecha declarado en mi BD es una fecha corta. Intenta esto, sino para es este foro,para preguntar.
Saludos


fecha1:='#31/08/2004#';
fecha2:='#09/09/2004#';
with query do
begin
sql.text:='SELECT * FROM PROYECTOS WHERE FECHAINICIO BETWEEN '+fecha1+' and ' +fecha2+' order by fechainicio';
open;
end;

pepe2000
21-07-2005, 02:15:16
Hola
¿Cual es el procedimiento para utilizar el formato dd/mm/yyyy en las consultas de access; y sin necesidad de cambiar la configuracion del sistema operativo?,
Utilizando parametros sería una forma, pero no hay una manera directa de decirle a access
Select * from tabla where fecha=#24/06/2005#

????
Un saludo y Gracias por anticipado.

ContraVeneno
21-07-2005, 16:36:13
la función formatdatetime podría funcionar

epuigdef
25-07-2005, 12:51:09
Con SQL podemos formatear el campo de la fecha a yyyyMMdd de forma que se puedan comparar como si fueran cadenas. Este truco lo vengo utilizando desde hace mucho tiempo y no me ha dado errores:

select *
from tabla
where format(campo, 'yyyyMMdd') >= format(parametro_ini, 'yyyyMMdd') and
format(campo, 'yyyyMMdd') <= format(parametro_fin, 'yyyyMMdd')


Donde parametro_ini y parametro_fin seran dos parámetros que le puedes pasar al TQuery desde programa.

ContraVeneno
27-07-2005, 00:58:08
format(campo,'ddmmyyyy') no me funciona en SQL Server
me dice que la función format no es un nombre de función conocido....
¿existe algo similiar para SQL Server?