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

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

Параметры в хранимой процедуре IB [D7, IB6.x]


Александр Ч_ ©   (2003-07-01 09:35:00) 

Может кто прокомментировать следующий факт:
В ADO компонентах все работает, а вот в IB

procedure TForm1.Button1Click(Sender: TObject);
begin
sp1.Active:=False;
Sp1.ParamByName("INString").AsString:="dsar srgs rw @#";
Sp1.ExecProc;
// Edit2.Text:=Sp1OutString.AsString; // - НЕ РАБОТАЕТ
Edit2.Text:=Sp1.Params.Items[0].AsString; // РАБОТАЕТ
end;

т.е. выходной параметр из хранимой процедуры возвращается только
по items, а по имени нет.


Zacho   (2003-07-01 12:31:00) [1]


> Zacho © (01.07.03 12:22)

Извиняюсь, Open не работает.

> Johnmen © (01.07.03 12:22)

Уже убедился :-) Просто думал, что т.к. TIBStoredProc - потомок TDataSet, то и работа с полями возвращаемого НД должна быть такой же. Оказывается, ошибался :(


Zacho   (2003-07-01 12:22:00) [2]


> Александр Ч_ (01.07.03 12:19)

А Open вместо ExecProc пробовал ?
И еще раз повторю: не стоит его использовать. Подробности - в http://www.ibase.ru/devinfo/ibstp.htm


Johnmen   (2003-07-01 12:22:00) [3]

>Zacho © (01.07.03 12:07)

Чтобы обратиться "также" надо иметь список полей, где они будут отображены с именами, по умолчанию совпадающими с именами вых.параметров. "Автоматом" он не делается !


Александр Ч_   (2003-07-01 12:19:00) [4]

Компонент - TIBStoredProc и есть.


Zacho   (2003-07-01 12:07:00) [5]


> Johnmen © (01.07.03 12:05)

Почему ?
Правда, до сих пор не понятно, о каком именно компоненте идет речь, но по крайней мере TIBStoredProc - потомок TDataSet.


Johnmen   (2003-07-01 12:05:00) [6]

>Александр Ч_ (01.07.03 11:52)
>к ним можно обратиться точно так же.

Нельзя ! По определению.


SergeyNew   (2003-07-01 12:04:00) [7]

>Sp1.ParamByName("OutString").AsString:="";
попробовал. ничего не изменилось


а у тебя в ХП есть выходной пар-р "OutString" ?


Александр Ч_   (2003-07-01 11:52:00) [8]


>Johnmen

Правильно рассуждаешь.

в Sp1OutString.AsString
OutString -это и есть поле из списка НД. Если процедура
возвращает не набор данных, а только параметры, к ним можно обратиться точно так же.


Johnmen   (2003-07-01 11:45:00) [9]

>Александр Ч_

Еще раз, подробнее :
- список вх./вых. параметров и их свойства - в списке Params
- двойной клик на SP - список полей НД, возможно возвращаемого ХП
Думаю, понятно, что это разные вещи...:)


Zacho   (2003-07-01 11:40:00) [10]


> Александр Ч_ (01.07.03 11:34)

Компоненты-то хоть какие ? IBX ? BDE ?
Если IBX, то может стоит вместо Sp1.ExecProc; попробовать Sp1.Open; ?


Александр Ч_   (2003-07-01 11:34:00) [11]

>SergeyNew

Sp1.ParamByName("OutString").AsString:="";

попробовал. ничего не изменилось


Александр Ч_   (2003-07-01 11:24:00) [12]

Johnmen

Как при каких действиях? Путать я ничего не могу, я это не
один раз делал, но в ADO. Щелкаешь мышкой два раза на SP при
установленном соединении и все, а потом отключаешь соединение,
если надо. Таким образом не придется настраивать тип поля и т.п
Все выходные параметры отобразятся в списке.


SergeyNew   (2003-07-01 11:03:00) [13]

...
Sp1.ParamByName("OutString").AsString:="";
Sp1.ExecProc;
Edit2.Text:=Sp1.ParamByName("OutString").AsString;
...


Johnmen   (2003-07-01 10:55:00) [14]

>Александр Ч_ (01.07.03 10:49)
>У компоненты SP1 в редакторе полей есть поле OutString,
>сформированное автоматически

Не может такого быть !
Возможно, ты путаешь список параметров со списком полей.

>сформированное автоматически

После каких действий ?


Александр Ч_   (2003-07-01 10:49:00) [15]

Издеваешься?

У компоненты SP1 в редакторе полей есть поле OutString,
сформированное автоматически


Johnmen   (2003-07-01 10:27:00) [16]

>Александр Ч_ (01.07.03 10:11)
>В том-то и дело, что все там есть,...

Что - всё ? И где - там ?
:)


Александр Ч_   (2003-07-01 10:11:00) [17]

Johnmen

В том-то и дело, что все там есть, иначе ошибка будет при компиляции.


Johnmen   (2003-07-01 09:58:00) [18]

Кстати,
// Edit2.Text:=Sp1OutString.AsString; // - НЕ РАБОТАЕТ
это потому, что такого поля нет в списке полей (см.фиелд-эдитор).
Наличие вх./вых. параметров не приводит к автоматическому пополнению списка...



Zacho   (2003-07-01 09:46:00) [19]


> Александр Ч_ (01.07.03 09:35)

Прокомментировать это не могу, т.к. не пользуюсь TIBStoredProc, но могу дать совет: вместо TIBStoredProc использовать TIBSQL с запросом типа SELECT * FROM MY_PROC(:PARAM1,..) и в процедуре делать SUSPEND даже если она возвращает только одну запись - проблем будет меньше.


Johnmen   (2003-07-01 09:44:00) [20]

А что с ParamByName ?


Наверх

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