Вниз
Скачать: CL | DM;

Параметры в 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
3-1164280830
vl
2006-11-23 14:20
2007.02.18
HTML-таблица


2-1170176286
NikNet
2007-01-30 19:58
2007.02.18
Мне нужно получить строку анализа от SQL от компонента ADOQuery


4-1159423982
Серге И
2006-09-28 10:13
2007.02.18
Как получить доступ к Bios из Windows


2-1170059211
novill
2007-01-29 11:26
2007.02.18
Почему консольная программа некорректно выводит русский текст?


15-1169621895
vajo
2007-01-24 09:58
2007.02.18
Ищу файлменеджер




   Наверх