使用参数的SQL数据查询-Delphi

使用参数的SQL数据查询-Delphi,sql,delphi,ms-access,Sql,Delphi,Ms Access,我有一个SQL查询(MS Access),我想将Date()函数添加到一个参数中,但是我得到一个错误:[ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配。 代码如下: Qry.SQL.Text := 'SELECT Bookings.Date, Bookings.WeekDay, Bookings.Shift, Bookings.Start, Bookings.Finish,' + ' Bookings.DateFinish, Wards.WardName

我有一个SQL查询(MS Access),我想将Date()函数添加到一个参数中,但是我得到一个错误:
[ODBC Microsoft Access驱动程序]条件表达式中的数据类型不匹配。
代码如下:

Qry.SQL.Text := 'SELECT Bookings.Date, Bookings.WeekDay, Bookings.Shift, Bookings.Start, Bookings.Finish,'
    + ' Bookings.DateFinish, Wards.WardName'
    + ' FROM Bookings'
    + ' INNER JOIN Wards ON Bookings.WardNo = Wards.WardNo'
    + ' WHERE (Bookings.NurseNo=:nurseID) AND (Bookings.Date BETWEEN :dateA AND :dateB)'
    + ' ORDER BY Bookings.Date ASC;';

Qry.Params.ParamByName('dateA').Value := 'Date()';
Qry.Params.ParamByName('dateB').Value := 'Date()+6';

我还尝试了
Qry.Params.ParamByName('dateA')。AsString:=“Date()”
但是运气不好,有没有正确的方法来实现这一点,或者它实际上必须在查询中而不是参数化?我想这样做的原因是,我会根据按下哪个按钮进行多个不同的查询,但唯一改变的是那些参数化的日期。

参数不能是函数,它必须是值。您正在将字符串指定为这些值,而这些字符串不表示有效日期。这就是为什么会出现不匹配错误

您可以使用Delphi
Date()
函数,并将返回的
TDate
作为参数值传递:

Qry.Params.ParamByName('dateA').Value := Date();
Qry.Params.ParamByName('dateB').Value := Date()+6;
或者,您可以在SQL本身中使用Access的
Date()
函数:

Qry.SQL.Text := 'SELECT Bookings.Date, Bookings.WeekDay, Bookings.Shift, Bookings.Start, Bookings.Finish,'
    + ' Bookings.DateFinish, Wards.WardName'
    + ' FROM Bookings'
    + ' INNER JOIN Wards ON Bookings.WardNo = Wards.WardNo'
    + ' WHERE (Bookings.NurseNo=:nurseID) AND (Bookings.Date BETWEEN Date() AND Date() + 6)'
    + ' ORDER BY Bookings.Date ASC;';

参数不能是函数,必须是值。您正在将字符串指定为这些值,而这些字符串不表示有效日期。这就是为什么会出现不匹配错误

您可以使用Delphi
Date()
函数,并将返回的
TDate
作为参数值传递:

Qry.Params.ParamByName('dateA').Value := Date();
Qry.Params.ParamByName('dateB').Value := Date()+6;
或者,您可以在SQL本身中使用Access的
Date()
函数:

Qry.SQL.Text := 'SELECT Bookings.Date, Bookings.WeekDay, Bookings.Shift, Bookings.Start, Bookings.Finish,'
    + ' Bookings.DateFinish, Wards.WardName'
    + ' FROM Bookings'
    + ' INNER JOIN Wards ON Bookings.WardNo = Wards.WardNo'
    + ' WHERE (Bookings.NurseNo=:nurseID) AND (Bookings.Date BETWEEN Date() AND Date() + 6)'
    + ' ORDER BY Bookings.Date ASC;';

如果您指的是Delphi
Date
函数,为什么不
Qry.Params.ParamByName('dateA')。值:=Date?@Zhorov
日期之间有什么区别
日期()?认为这是一样的吗?这里的区别是
'Date()'
Date
之间的区别。如果我正确理解了您的代码,请将Delphi的
date
函数的结果作为您的参数值。@Zhorov啊,好的,已经成功了!,我肯定我以前试过,但我一定用过Qry.Params.ParamByName('dateA').AsString:=Date();,谢谢你的帮助!如果您指的是Delphi
Date
函数,为什么不
Qry.Params.ParamByName('dateA')。值:=Date?@Zhorov
日期之间有什么区别
日期()?认为这是一样的吗?这里的区别是
'Date()'
Date
之间的区别。如果我正确理解了您的代码,请将Delphi的
date
函数的结果作为您的参数值。@Zhorov啊,好的,已经成功了!,我肯定我以前试过,但我一定用过Qry.Params.ParamByName('dateA').AsString:=Date();,谢谢你的帮助!