SQL Date Query с использованием параметров - Delphi - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть 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()';, но не повезло с этим, есть ли правильный способ сделать это, или он действительно должен быть в запросе, а не параметризован?Причина, по которой я хочу сделать это следующим образом, заключается в том, что у меня будет несколько разных запросов, основанных на том, какая кнопка нажата, но единственное изменение - это параметризованные даты.

1 Ответ

0 голосов
/ 26 февраля 2019

Параметр не может быть функцией, это должно быть значение.Вы назначаете строки в качестве этих значений, и эти строки не представляют действительные даты.Вот почему вы получаете ошибку несоответствия.

Вы можете использовать функцию Delphi Date() и передать возвращенное значение TDate в качестве значения параметра:

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

Или вы можетеиспользуйте функцию Access Date() в самом SQL:

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;';
...