![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Условия отбора [D7, XP]
TimScorp © (2006-04-07 20:51:00)Доброго времени суток!!!
Вопрос в следующем:
Имеем таблицу в Access в ней есть Поле: Date тип - Дата/время
Хранятся в этом поле даты.
пишу запрос типа:
DM.APQ.SQL.Add('WHERE Date BETWEEN '+ QuotedStr (MaskEdit1.Text) + ' AND ' + QuotedStr(MaskEdit2.Text));
Выдает ошибку: Несоответствие типов данных в выражении условия отбора.
TimScorp (2006-04-13 12:16:00) [1]Попробую.
С уважением TimScorp.
sniknik (2006-04-10 12:15:00) [2]> Но если написать так:
> DM.APQ.Parameters.ParamValues['DateFrom'] := DateTimePicker1.Date;
> DM.APQ.Parameters.ParamValues['DateTo'] := DateTimePicker2.Date;
> То не работает. Почему не пойму.
напиши DM.APQ.Parameters.ParamValues['DateFrom'] := DateTimePicker1. DateTime;
+
Anatoly Podgoretsky © (10.04.06 01:10) [24]
> Убери время из дат
Desdechado (2006-04-10 11:52:00) [3]Anatoly Podgoretsky © (10.04.06 01:10) [24]
BETWEEN включает границы
TimScorp © (09.04.06 16:38) [22]
d и d1 небось типа TDate?
просто Value - имеет тип Variant, а он включает информацию о типе присваиваемого значения
vovnuke (2006-04-10 09:55:00) [4]это cvdateне Delph-овая функция.
Если дословно то надо вот так:
'where MyDate between cvdate('+QuotedStr(text1)+') and cvdate('+QuotedStr(text2)+')';
Но с параметрами лучше.
Насчет [14], какого типа параметры?
Anatoly Podgoretsky (2006-04-10 01:10:00) [5]Убери время из дат, и between замени операторами отношения
TimScorp (2006-04-09 23:56:00) [6]Мдя токо почему-то граничные пределы не входят. Пришлось писать так:
d := DateTimePicker1.Date-1;
d1 := DateTimePicker2.Date+1;
Почему тож понять не можу.
С уважением TimScorp.
TimScorp (2006-04-09 16:38:00) [7]Заработало вот так:
d := DateTimePicker1.Date;
d1 := DateTimePicker2.Date;
DM.APQ.Active := false;
DM.APQ.SQL.Clear;
DM.APQ.SQL.Add('SELECT *');
DM.APQ.SQL.Add('FROM AP');
DM.APQ.SQL.Add('WHERE [Date_] BETWEEN :DateFrom AND :DateTo');
DM.APQ.Parameters.ParamValues['DateFrom'] := d;
DM.APQ.Parameters.ParamValues['DateTo'] := d1;
DM.APQ.Active := true;
Но если написать так:
DM.APQ.Parameters.ParamValues['DateFrom'] := DateTimePicker1.Date;
DM.APQ.Parameters.ParamValues['DateTo'] := DateTimePicker2.Date;
То не работает. Почему не пойму.
С уважением TimScorp.
palva (2006-04-09 09:19:00) [8]> Выдает ошибку: Несоответствие типов данных в выражении условия отбора.
В SQL-команде неправильный формат даты. Вы пробовали использовать формат как в balepa © (08.04.06 10:14) [4] ?
TimScorp (2006-04-09 04:00:00) [9]ап
TimScorp (2006-04-08 22:59:00) [10]
> Desdechado © (08.04.06 21:22) [18]
> тебе же сказали, используй параметры
> sql.text:='SELECT * FROM tbl WHERE x BETWEEN :1 AND :2';
>
> params[0].AsDate:=Date-1;
> params[1].AsDate:=Date;
В ADO нету params тама есть parameters и если ты посмотришь на [14] пост то увидишь что тама и используются параметры.
С уважением TimScorp
Desdechado (2006-04-08 21:22:00) [11]тебе же сказали, используй параметры
sql.text:='SELECT * FROM tbl WHERE x BETWEEN :1 AND :2';
params[0].AsDate:=Date-1;
params[1].AsDate:=Date;
TimScorp (2006-04-08 20:07:00) [12]переименовал в Date_.
Ошибка та же.
С уважением TimScorp
Anatoly Podgoretsky (2006-04-08 20:04:00) [13]Date зарезервированое имя
TimScorp (2006-04-08 20:04:00) [14]если переименую работать будет???
TimScorp (2006-04-08 19:58:00) [15]DM.APQ.Active := false;
DM.APQ.SQL.Clear;
DM.APQ.SQL.Add('SELECT *');
DM.APQ.SQL.Add('FROM AP');
DM.APQ.SQL.Add('WHERE Date BETWEEN :DateFrom AND :DateTo');
DM.APQ.Parameters.ParamValues['DateFrom'] := DateTimePicker1.Date;
DM.APQ.Parameters.ParamValues['DateTo'] := DateTimePicker2.Date;
DM.APQ.Active := true;
Выдает ошибку: Несоответствие типов данных в выражении условия отбора.
С уважением TimScorp
Anatoly Podgoretsky (2006-04-08 19:26:00) [16]TimScorp © (08.04.06 16:58) [6]
Как неправильно делаешь?
TimScorp (2006-04-08 17:43:00) [17]
> vovnuke © (08.04.06 17:38) [11]
> посмотри в параметрах в Access, а вообще можно поробовать
> так:
> where MyDate between cvdate(QuotedStr(text1)) and cvdate(QuotedStr(text2))
cvdate - ошибка при компиляции
vovnuke (2006-04-08 17:38:00) [18]посмотри в параметрах в Access, а вообще можно поробовать так:
where MyDate between cvdate(QuotedStr(text1)) and cvdate(QuotedStr(text2))
TimScorp (2006-04-08 17:36:00) [19]незнаю
vovnuke (2006-04-08 17:28:00) [20]стандарт SQL какой? ANSI 89 или ANSI 92, даты там по разному задаются, почитай хелп в Access