Las fechas son algo especiales, porque se pueden pasr en varios formatos :
dd/mm/yyyy
mm/dd/yyyy
yyyy/mm/dd
Es mejor que Delphi sea el que busque el formato adecuado para este tipo de datos, así que usamos parámetros:
Código Delphi
[-]
With dm.QBusKardex do
begin
Close;
SQL.Clear;
sqlKardex:= 'Select * from tb_Kardex where %s = %s AND FechaTransaccion BETWEEN : prFechaInicio AND : prFechaFin';
SQL.Text := Format(sqlKardex,
['idArtEan',
QuotedStr(ResArticulo)]);
Parambyname('prFechaInicio').AsDatetime := dtFechaInicio.Date;
Parambyname('prFechaFin').AsDatetime := dtFechaFinal.Date;
Open;
En este caso queda algo engorrosa la consulta, pero el nombre de un campo (IdArtEan) no puede pasarse por parámetros. el uso de parámetros en una consulta simple sería:
Código Delphi
[-]
query1.sql.text := ' SELECT * FROM TABLA WHERE Codigo = : prCodigo AND FECHA BETWEEN : pr1 AND : pr2' ;
query1.Parambyname('pr1').AsDateTime := now;
query1.Parambyname('pr2').AsDateTime := now + 4;
query1.Parambyname('prCodigo').AsInteger := 23;
query1.Open;
Como ves, a todos los
pa
rámetros de la consulta le pongo el prefijo "pr" delante, más que nada por claridad para mí. Simplemente con anteponer los dos puntos ":" a cualquier nombre, ya delphi lo interpreta como un parámetro.
Saludos