Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.08.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.062 c
4-1088358299
XeLax
2004-06-27 21:44
2004.08.08
что такое хинт?


4-1088340452
pantel
2004-06-27 16:47
2004.08.08
Поименованные трубы (named pipes)


4-1088413866
Buster
2004-06-28 13:11
2004.08.08
Как определить время создания файла и директории?


8-1085311364
ттт
2004-05-23 15:22
2004.08.08
Как в Дельфи работать с изображениями серой градации


14-1089639086
Piter
2004-07-12 17:31
2004.08.08
Создание форм в MDI приложении





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский