![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Параметры в 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
и т.д.