Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятки с запросом [D7, ADO + MsAccess]


Страницы:   1 2 3

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]

Ты объясни толком, что хочешь сделать то?


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо