Asumiendo PayDate
Se define como date
/datetime
En MSSQL puede usar parámetros de la siguiente manera:
qryTemp.SQL.Text:=' select top 1 iif(ComeSumm>0,comesumm,0) from cash '
+' where idCashReason=1 and idCashClause=8 and cashNum='+IntToStr(i)
+' and PayDate<:D'
+' order by payDate desc';
qryTemp.Parameters.ParamByName('D').Value := Date;
qryTemp.Parameters.ParamByName('D').DataType := ftDateTime;
También cambiaría cashNum
a parámetro es decir:
...
+' where idCashReason=1 and idCashClause=8 and cashNum=:cashNum'+
...
qryTemp.Parameters.ParamByName('cashNum').Value := i;
Siempre prefiera usar tipos de datos compatibles con sus parámetros, en lugar de formatear y usar cadenas. SQL no necesita adivinar sus tipos de datos si puede definirlos explícitamente.
Nota: IIF
se introdujo en SQL Server 2012. Para el uso de la versión anterior CASO expresión.
En las versiones de Delphi no unicode más antiguas, los parámetros tienen problemas con Unicode.
Así que si usted no Use parámetros que pueda usar lo siguiente:
function DateTimeToSqlDateTime(const DT: TDateTime): WideString;
begin
Result := FormatDateTime('yyyy-MM-dd', DT) + ' ' + FormatDateTime('hh:mm:ss', DT);
end;
function SqlDateTimeStr(const DT: TDateTime; const Is_MSSQL: Boolean): WideString;
var
S: WideString;
begin
S := DateTimeToSqlDateTime(DT);
if Is_MSSQL then
Result := Format('CONVERT(DATETIME, ''%s'', 102)', [S])
else
Result := Format('#%s#', [S]); // MS-ACCESS
end;
Y su consulta se verá de la siguiente manera:
...
+' and PayDate<' + SqlDateTimeStr(Date, True)
...