![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Непонятки с запросом [D7, ADO + MsAccess]
Ozone © (2004-07-15 06:58:00)Выполняю такой запрос:
UPDATE TABLE_NAME
SEL FIELD_NAME = 1
WHERE (ClientID = :ID)
AND (:PicTime BETWEEN BeginD and EndD)
Делаю:
//TADOQuery
Active := false;
Parameters.ParamValues['ID'] := ...;
Parameters.ParamValues['PicTime'] := ...;
ExecSQL;
Выдает ошибку - "Отсутствует значение одного или нескольких параметров".
Такой запрос с тем же вызовом проходит на ура:
SELECT *
FROM TABLE_NAME
WHERE (ClientID = :ID)
AND (:PicTime BETWEEN BeginD and EndD)
Где я чего не усмотрел?
bushmen (2004-07-15 10:03:00) [21]> Ozone © (15.07.04 09:55) [25]
Ты попробуй убрать 2 условие. Посмотри, что будет
NAlexey (2004-07-15 09:57:00) [22]>Johnmen © (15.07.04 09:53) [22]
Да, скорее всего ты прав. Конструкция не неправильная, а непревычная для глаза, я ниразу не использовал её в таком ключе. Потому как какой смысл писать:
select * from Table where 2 between 1 and 3...
Johnmen (2004-07-15 09:55:00) [23]>3. Перед PTime убрать двоеточие.
:))) Забавно...
Ozone (2004-07-15 09:55:00) [24]_ALEXey_ (15.07.04 09:53) [23]
>> 1. Судя по [9] поля SError нигде нету.
Есть. Забыл указать.
>> 2. AND 3.
???
_ALEXey_ (2004-07-15 09:53:00) [25]
UPDATE Sessions
SET SError = 1
WHERE (ClientID = :ID) AND (:PTime BETWEEN BeginD AND EndD)
1. Судя по [9] поля SError нигде нету.
2. Поля BeginD, EndD неизвестно откуда брать.
3. Перед PTime убрать двоеточие.
Johnmen (2004-07-15 09:53:00) [26]>bushmen © (15.07.04 09:45) [20]
>Значение, находящееся в поле, может принимать значения "от"
>и "до", а не наоборот:
Не понял.
И почему не может наоборот ? Кто запрещает ?
Вот, что говорит нам документация
<value> [NOT] BETWEEN <value> AND <value>
Ozone (2004-07-15 09:50:00) [27]bushmen © (15.07.04 09:45) [20]
Тогда обьясни, почему в таком случае работает простой SELECT
bushmen (2004-07-15 09:45:00) [28]> Почему ?
Значение, находящееся в поле, может принимать значения "от" и "до", а не наоборот:
pole1 between :par1 and :par2
Ozone (2004-07-15 09:42:00) [29]Johnmen © (15.07.04 09:37) [16]
Обидно, если это так...
Johnmen (2004-07-15 09:41:00) [30]>bushmen © (15.07.04 09:39) [17]
>По сути своей конструкция неправильная!
Почему ?
bushmen (2004-07-15 09:39:00) [31]> (:PTime BETWEEN BeginD AND EndD)
По сути своей конструкция неправильная!
Johnmen (2004-07-15 09:37:00) [32]
"В потолке открылся люк.
Не волнуйтесь, это глюк !" (c)
Ильш (2004-07-15 09:36:00) [33]а Prepare не надо делать?
Ozone (2004-07-15 09:28:00) [34]NAlexey © (15.07.04 09:22) [12]
А таким макаром SELECT ничего не находит...
Ozone (2004-07-15 09:22:00) [35]ЮЮ © (15.07.04 09:18) [11]
Parameters.ParamValues['ID'] := Query.FieldByName('ClientID').AsInteger;
Parameters.ParamValues['PTime'] := Query.FieldByName('DateTime').AsDateTime;
... но он же на Session.SError ругается
NAlexey (2004-07-15 09:22:00) [36]>NAlexey © (15.07.04 09:16) [10]
Не, бред я какой то написал. Извини запутался, тебе надо получить записи из таблицы 2 у которых BeginD меньше указанной даты, а EndD больше указанной даты? Значит условие будет такое:
BeginD <= :PTime and EndD >= :PTime. Думаю что применение BETWEEN здесь неуместно.
ЮЮ (2004-07-15 09:18:00) [37]>Этот запрос я выполняю в обработчике OnDblClick Grid'а
Тогда выкладывай, то что стоит справа
Parameters.ParamValues['ID'] := ...;
Parameters.ParamValues['PicTime'] := ...;
NAlexey (2004-07-15 09:16:00) [38]Ну тогда и запрос наверное надо писать
CTime BETWEEN BeginD and EndD and CTime = :PTime
Ozone (2004-07-15 09:10:00) [39]NAlexey © (15.07.04 08:59) [7]
Но ведь SELECT работает...
NAlexey © (15.07.04 09:00) [8]
Есть 2 таблицы с полями:
1. ClientID, CTime
2. ClientID, BeginD, EndD
Этот запрос я выполняю в обработчике OnDblClick Grid'а (он привязан к 1-й) и хочу получить запись во 2-й, где CTime первой лежит в пределах BeginD и EndD 2-й.
NAlexey (2004-07-15 09:00:00) [40]Ты объясни толком, что хочешь сделать то?