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

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

Параметры в ADO


moybobr ©   (2006-11-27 12:57:00) 

Кто работал с параметрами для TADOQuery.

Подскажите, если кто знает как задать параметр с одним и тем же именем для TADOQuery, причем в запросе на этот параметр несколько ссылок.

Есть запрос к Ораклу. В запросе есть параметры, причем один и тот же параметр в запросе встречается несколько раз (Например
select * from
   (select * from table1 where arcdate=:bdate) a1,
    table2 a2
 where a1.id=a2.id and a2.arcdate=:bdate).

Параметры задаются программно.
...
ADOQuery.Params.ParamByName('bdate').Value:='21/12/2006';
ADOQuery.Open;
...
Втаком случае выдается ошибка: "Неправильно определен объект Parameter. Предоставлены несовместимые или неполные сведения"

Проблема в том, что т.к. в запросе 2 параметра, то их необходимо явно задать.
...
ADOQuery.Params.Items[0].Value:='21/12/2006';
ADOQuery.Params.Items[1].Value:='21/12/2006';
ADOQuery.Open;
...
При отлдаке, смотрю в Object Inspector оба параметра заданы, но ошибка та же.

Если же значения параметров задать статически запрос отрабатывает.

Если изменить запрос и вместо bdate записать :bdate1 и :bdate2
и в программе соответственно
...
ADOQuery.Params.Items[0].Value:='21/12/2006';
ADOQuery.Params.Items[1].Value:='21/12/2006';
ADOQuery.Open;
...

То все работает.

Запрос сложный, используется bdate несколько раз. Поменять на bdate1 ... bdateN  я не могу, т.к. ухудшиться его время выполнения. Проверял.

Подскажите, если кто знает, как задать параметр с одним и тем же именем для TADOQuery, причем в запросе на этот параметр несколько ссылок.


moybobr   (2006-11-27 16:34:00) [1]

Спасибо всем. Проблема решена путем полной программной инициализации всех параметров:
...
bal_Q.Parameters.Items[i].Direction:=pdInput;
bal_Q.Parameters.Items[i].DataType:=ftDateTime;
bal_Q.Parameters.Items[i].Value:=main_fm.begindate_DTP.DateTime;
...


moybobr   (2006-11-27 14:32:00) [2]

to k2:
Даты. Хотя в примере приведено как варчар, но в самой программе begindate_DTP.DateTime, где begindate_DTP: TDateTimePicker;


Stanislav   (2006-11-27 14:04:00) [3]

а в TADODATASET ?
на MS SQL работает нормально, только не редактируемый набор данных получается.


k2   (2006-11-27 14:00:00) [4]

одинаковые какие? :) даты или варчары


moybobr   (2006-11-27 13:58:00) [5]

to stanislav:
да, действительно можно использовать переменные ораклa.
declare
bdate date;
begin
....
select into ....
....
end;
В таком случае получается PL/SQL блок. Который не выполняется в TADOQUERY просто так, поскольку TADOQUERY должна возвращать результирующее значение. Здесь можно через курсор, но это излишняя сложность.

to k2:
типы у arcdate,bdate,bdate1, bdate2 одинаковые


k2   (2006-11-27 13:41:00) [6]

а тип какой у arcdate, bdate, bdate1, bdate2?


Stanislav   (2006-11-27 13:28:00) [7]

Использовать переменные сервера.
незнаю как в оракле в MS SQL так:
declare @A int

set @a= :par

select ...,@a from ... where pole1=@a or pole2=@a
и т.д.


Наверх

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