Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
ВнизПараметры в ADO Найти похожие ветки
← →
moybobr © (2006-11-27 12:57) [0]Кто работал с параметрами для 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, причем в запросе на этот параметр несколько ссылок.
← →
Stanislav © (2006-11-27 13:28) [1]Использовать переменные сервера.
незнаю как в оракле в MS SQL так:
declare @A int
set @a= :par
select ...,@a from ... where pole1=@a or pole2=@a
и т.д.
← →
k2 © (2006-11-27 13:41) [2]а тип какой у arcdate, bdate, bdate1, bdate2?
← →
moybobr © (2006-11-27 13:58) [3]to stanislav:
да, действительно можно использовать переменные ораклa.
declare
bdate date;
begin
....
select into ....
....
end;
В таком случае получается PL/SQL блок. Который не выполняется в TADOQUERY просто так, поскольку TADOQUERY должна возвращать результирующее значение. Здесь можно через курсор, но это излишняя сложность.
to k2:
типы у arcdate,bdate,bdate1, bdate2 одинаковые
← →
k2 © (2006-11-27 14:00) [4]одинаковые какие? :) даты или варчары
← →
Stanislav © (2006-11-27 14:04) [5]а в TADODATASET ?
на MS SQL работает нормально, только не редактируемый набор данных получается.
← →
moybobr © (2006-11-27 14:32) [6]to k2:
Даты. Хотя в примере приведено как варчар, но в самой программе begindate_DTP.DateTime, где begindate_DTP: TDateTimePicker;
← →
moybobr © (2006-11-27 16:34) [7]Спасибо всем. Проблема решена путем полной программной инициализации всех параметров:
...
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;
...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.02.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c