Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.18;
Скачать: 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 вся ветка

Текущий архив: 2007.02.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.052 c
15-1169382005
ChainikDenis
2007-01-21 15:20
2007.02.18
Как затормозить основной поток?


15-1169802163
Kyn66
2007-01-26 12:02
2007.02.18
Установка компонента Webbrowser


15-1170137781
КиТаЯц
2007-01-30 09:16
2007.02.18
Является ли грехом использование взломанных версий? :)


15-1169853003
eRoR_rrr
2007-01-27 02:10
2007.02.18
mIRC скрипт в Delphi код


2-1170165325
Arm79
2007-01-30 16:55
2007.02.18
Каким способом лучше всего собрать из байтов Integer?