Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.08;
Скачать: CL | DM;

Вниз

Непонятки с запросом   Найти похожие ветки 

 
Ozone ©   (2004-07-15 06:58) [0]

Выполняю такой запрос:

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)


Где я чего не усмотрел?


 
CHTR   (2004-07-15 07:09) [1]

Может просто ошибка синтаксиса? Типа вместо SET у тебя написано SEL


 
CHTR   (2004-07-15 07:11) [2]

Хотя наврядли


 
Ozone ©   (2004-07-15 07:50) [3]

CHTR   (15.07.04 07:09) [1]

Нет. Это я здесь обшипся...


 
NAlexey ©   (2004-07-15 08:55) [4]

>Ozone ©   (15.07.04 06:58)  
Ну и правильно говорит. Сокрее всего у тебя названия параметров в запросе не совпадают с названиями которые ты используешь при присвоении. Попробуй присваивать по номерам, ну например:

Parameters[0].Value := ...;
Parameters[1].Value := ...;


 
Ozone ©   (2004-07-15 08:55) [5]

Нешел у себя косячек небольшой в запросе (поле обозвал не правильно).
Теперь запрос выглядит так:


UPDATE Sessions
SET SError = 1
WHERE (ClientID = :ID) AND (:PTime BETWEEN BeginD AND EndD)


И опять ошибка:
"Одно или несколько из введеных значений нарушают условие на значение "False", заданного для "Session.SError", введите значение, допускаемое для этого поля."

ЗЫ: Поле SError имеет числовой тип


 
Ozone ©   (2004-07-15 08:57) [6]

NAlexey ©   (15.07.04 08:55) [4]

Тогда бы он сказал, что такой параметр не найден...


 
NAlexey ©   (2004-07-15 08:59) [7]

Кстати, а это еще что за интересное условие?:
:PicTime BETWEEN BeginD and EndD
Ты наверное что то путаешь... BETWEEN используют в случаях когда хотят сказать: выбрать записи в которых значение поля таблицы находится между такимто и такимто значением. У тебя наоборот. Подумай над этим.


 
NAlexey ©   (2004-07-15 09:00) [8]

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


 
Ozone ©   (2004-07-15 09:10) [9]

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:16) [10]

Ну тогда и запрос наверное надо писать
CTime BETWEEN BeginD and EndD and CTime = :PTime


 
ЮЮ ©   (2004-07-15 09:18) [11]

>Этот запрос я выполняю в обработчике OnDblClick Grid"а

Тогда выкладывай, то что стоит справа
Parameters.ParamValues["ID"] := ...;
Parameters.ParamValues["PicTime"] := ...;


 
NAlexey ©   (2004-07-15 09:22) [12]

>NAlexey ©   (15.07.04 09:16) [10]
Не, бред я какой то написал. Извини запутался, тебе надо получить записи из таблицы 2 у которых BeginD меньше указанной даты, а EndD больше указанной даты? Значит условие будет такое:
BeginD <= :PTime and EndD >= :PTime. Думаю что применение BETWEEN здесь неуместно.


 
Ozone ©   (2004-07-15 09:22) [13]

ЮЮ ©   (15.07.04 09:18) [11]

Parameters.ParamValues["ID"] := Query.FieldByName("ClientID").AsInteger;
Parameters.ParamValues["PTime"] := Query.FieldByName("DateTime").AsDateTime;

... но он же на Session.SError ругается


 
Ozone ©   (2004-07-15 09:28) [14]

NAlexey ©   (15.07.04 09:22) [12]

А таким макаром SELECT ничего не находит...


 
Ильш ©   (2004-07-15 09:36) [15]

а Prepare не надо делать?


 
Johnmen ©   (2004-07-15 09:37) [16]

"В потолке открылся люк.
Не волнуйтесь, это глюк !" (c)


 
bushmen ©   (2004-07-15 09:39) [17]

> (:PTime BETWEEN BeginD AND EndD)

По сути своей конструкция неправильная!


 
Johnmen ©   (2004-07-15 09:41) [18]

>bushmen ©   (15.07.04 09:39) [17]
>По сути своей конструкция неправильная!

Почему ?


 
Ozone ©   (2004-07-15 09:42) [19]

Johnmen ©   (15.07.04 09:37) [16]

Обидно, если это так...


 
bushmen ©   (2004-07-15 09:45) [20]

> Почему ?

Значение, находящееся в поле, может принимать значения "от" и "до", а не наоборот:

pole1 between :par1 and :par2


 
Ozone ©   (2004-07-15 09:50) [21]

bushmen ©   (15.07.04 09:45) [20]

Тогда обьясни, почему в таком случае работает простой SELECT


 
Johnmen ©   (2004-07-15 09:53) [22]

>bushmen ©   (15.07.04 09:45) [20]
>Значение, находящееся в поле, может принимать значения "от"
>и "до", а не наоборот:

Не понял.
И почему не может наоборот ? Кто запрещает ?
Вот, что говорит нам документация
<value> [NOT] BETWEEN <value> AND <value>


 
_ALEXey_   (2004-07-15 09:53) [23]

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:55) [24]

>3. Перед PTime убрать двоеточие.

:))) Забавно...


 
Ozone ©   (2004-07-15 09:55) [25]

_ALEXey_   (15.07.04 09:53) [23]

>> 1.  Судя по [9] поля SError нигде нету.
Есть. Забыл указать.

>> 2. AND 3.

???


 
NAlexey ©   (2004-07-15 09:57) [26]

>Johnmen ©   (15.07.04 09:53) [22]
Да, скорее всего ты прав. Конструкция не неправильная, а непревычная для глаза, я ниразу не использовал её в таком ключе. Потому как какой смысл писать:
select * from Table where 2 between 1 and 3...


 
bushmen ©   (2004-07-15 10:03) [27]

> Ozone ©   (15.07.04 09:55) [25]

Ты попробуй убрать 2 условие. Посмотри, что будет


 
Ozone ©   (2004-07-15 10:05) [28]

NAlexey ©   (15.07.04 09:57) [26]

Все когда-то бывает в первый раз...

А что думаете по-поводу Ozone [14]?


 
Ozone ©   (2004-07-15 10:06) [29]

bushmen ©   (15.07.04 10:03) [27]

То же самое...


 
Johnmen ©   (2004-07-15 10:11) [30]

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


 
bushmen ©   (2004-07-15 10:13) [31]

А поле SError у тебя какого типа?


 
Ozone ©   (2004-07-15 10:34) [32]

bushmen ©   (15.07.04 10:13) [31]

TIntegerField


 
Johnmen ©   (2004-07-15 10:39) [33]

А поле SError в таблице у тебя какого типа?


 
bushmen ©   (2004-07-15 10:47) [34]

> Ozone ©   (15.07.04 10:34) [32]

Привиди, пожалуйста полностью структуру таблицы


 
Ozone ©   (2004-07-15 10:53) [35]

1:
Number    - TAutoIncField
ClientID  - TIntegerField
CTime     - TDateTimeField
Path      - TWideStringField

2:
SessionID - TAutoIncField
ClientID  - TIntegerField
BeginD    - TDateTimeField
EndD      - TDateTimeField
SError    - TIntegerField


 
Johnmen ©   (2004-07-15 10:57) [36]

>Ozone ©   (15.07.04 10:53) [35]

Таких типов полей табл. не существует в природе...:)


 
Ozone ©   (2004-07-15 11:03) [37]

Johnmen ©   (15.07.04 10:57) [36]

:) А у меня вот есть - значь я обенный? И ошибки у меня особенные?


 
Johnmen ©   (2004-07-15 11:08) [38]

>Ozone ©   (15.07.04 11:03) [37]
>А у меня вот есть - значь я обенный? И ошибки у меня особенные?

Тебе кажется, что есть... Потому, что путаешь никак не связанные вещи: средство разработки программ Delphi с его типами TField, TIntegerField etc, и базу данных с таблицами, типа Аксесс etc...


 
bushmen ©   (2004-07-15 11:09) [39]

> Ozone ©   (15.07.04 11:03) [37]

И у тебя их быть не может. Ты пытаешься перечислить типы, к которым ты приводишь значения в Дельфях. А я тебя просил описать структуру так, как она представлена в Access"e


 
Ozone ©   (2004-07-15 11:12) [40]

Хорошо, привожу как в Access"e

1:
Number    - Счетчик
ClientID  - Числовой
CTime     - Дата/Время
Path      - Текстовый

2:
SessionID - Счетчик
ClientID  - Числовой
BeginD    - Дата/Время
EndD      - Дата/Время
SError    - Числовой



Страницы: 1 2 вся ветка

Текущий архив: 2004.08.08;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.036 c
4-1088100353
Task
2004-06-24 22:05
2004.08.08
Scheduler


3-1089633365
Tempo
2004-07-12 15:56
2004.08.08
Параметры Locate


6-1086193906
neteditor
2004-06-02 20:31
2004.08.08
TThread.Suspend и TWinSocketStream.TimeOut


14-1089994075
RA
2004-07-16 20:07
2004.08.08
dvclcal


1-1090476209
Form
2004-07-22 10:03
2004.08.08
Дамп памяти процесса