我有一个SQL查询(MS Access),我想将Date()函数添加到参数中,但是出现错误:[ODBC Microsoft Access Driver]Data type mismatch in criteria expression.
这是代码:
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()';
,但是没有运气,是否有正确的方法来执行此操作,或者它实际上必须在查询中而不是参数化?我想这样做的原因是,根据按下哪个按钮,我将有多个不同的查询,但是唯一改变的是那些参数化的日期。
答案 0 :(得分:2)
参数不能是函数,必须是值。您正在将字符串指定为这些值,并且这些字符串不表示有效日期。这就是为什么您会遇到不匹配错误的原因。
您可以使用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;';