![]() |
| ||
|
|
Новости |
Поиск |
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)
Где я чего не усмотрел?
Ozone (2004-07-15 11:51:00) [1]NAlexey © (15.07.04 11:30) [44]
Ничего что тобой перечислено там не наблюдается.
А насчет статического запроса - попробую.
Johnmen (2004-07-15 11:50:00) [2]>NAlexey © (15.07.04 11:42) [45]
Ну почему же. Очень даже естественно. Ведь проверка на вхождение в диапазон, а не на точное совпадение...
NAlexey (2004-07-15 11:42:00) [3]>Johnmen © (15.07.04 10:11) [30]
Хм... По моему это както неестественно. Всеравно что написать так:
select * from Table where 1 in (Field1, Filed2, Filed3). Короче ч.з одно место.
NAlexey (2004-07-15 11:30:00) [4]>Ozone
Такой вопрос. Какие значения принимают поля BeginD и EndD. Есть ли записи у которых BeginD равно EndD и есть ли записи у которых EndD меньше BeginD.
>А что думаете по-поводу Ozone [14]?
А думаю я вот что, надо попробывать подставлять значения не через параметры, а напрямую, т.е написать статичный запрос, посомтреть какие значения есть в таблице, вставить их напрямую в запрос и выполнить.
bushmen (2004-07-15 11:29:00) [5]> Johnmen © (15.07.04 11:23) [42]
Как звучит в оригинале, сказать не могу - нет англоязычного офиса под рукой
Johnmen (2004-07-15 11:23:00) [6]>bushmen © (15.07.04 11:19) [41]
Спасибо переводчикам с незаконченным средним...:)))
bushmen (2004-07-15 11:19:00) [7]> Johnmen © (15.07.04 09:53) [22]
Наконец, добрался до справки по Access. Там написано:
"Оператор Between...And
Определяет принадлежность значения выражения указанному диапазону. Этот оператор можно использовать в инструкциях SQL.
Синтаксис:
выражение [Not] Between значение_1 And значение_2
Элемент Описание
-------------------------------------------------------------
выражение Выражение, определяющее поле,
значение которого нужно вычислить.
значение_1, значение_2 Выражения, задающие границы диапазона. "
Ozone (2004-07-15 11:12:00) [8]Хорошо, привожу как в Access'e
1:
Number - Счетчик
ClientID - Числовой
CTime - Дата/Время
Path - Текстовый
2:
SessionID - Счетчик
ClientID - Числовой
BeginD - Дата/Время
EndD - Дата/Время
SError - Числовой
bushmen (2004-07-15 11:09:00) [9]> Ozone © (15.07.04 11:03) [37]
И у тебя их быть не может. Ты пытаешься перечислить типы, к которым ты приводишь значения в Дельфях. А я тебя просил описать структуру так, как она представлена в Access'e
Johnmen (2004-07-15 11:08:00) [10]>Ozone © (15.07.04 11:03) [37]
>А у меня вот есть - значь я обенный? И ошибки у меня особенные?
Тебе кажется, что есть... Потому, что путаешь никак не связанные вещи: средство разработки программ Delphi с его типами TField, TIntegerField etc, и базу данных с таблицами, типа Аксесс etc...
Ozone (2004-07-15 11:03:00) [11]Johnmen © (15.07.04 10:57) [36]
:) А у меня вот есть - значь я обенный? И ошибки у меня особенные?
Johnmen (2004-07-15 10:57:00) [12]>Ozone © (15.07.04 10:53) [35]
Таких типов полей табл. не существует в природе...:)
Ozone (2004-07-15 10:53:00) [13]1:
Number - TAutoIncField
ClientID - TIntegerField
CTime - TDateTimeField
Path - TWideStringField
2:
SessionID - TAutoIncField
ClientID - TIntegerField
BeginD - TDateTimeField
EndD - TDateTimeField
SError - TIntegerField
bushmen (2004-07-15 10:47:00) [14]> Ozone © (15.07.04 10:34) [32]
Привиди, пожалуйста полностью структуру таблицы
Johnmen (2004-07-15 10:39:00) [15]А поле SError в таблице у тебя какого типа?
Ozone (2004-07-15 10:34:00) [16]bushmen © (15.07.04 10:13) [31]
TIntegerField
bushmen (2004-07-15 10:13:00) [17]А поле SError у тебя какого типа?
Johnmen (2004-07-15 10:11:00) [18]>NAlexey © (15.07.04 09:57) [26]
>Потому как какой смысл писать:
>select * from Table where 2 between 1 and 3...
Ты несколько не прав...
То, что ты привел - бессмысленно. Но совсем не бессмысленно
select * from Table where 2 between field1 and field2...
Ozone (2004-07-15 10:06:00) [19]bushmen © (15.07.04 10:03) [27]
То же самое...
Ozone (2004-07-15 10:05:00) [20]NAlexey © (15.07.04 09:57) [26]
Все когда-то бывает в первый раз...
А что думаете по-поводу Ozone [14]?