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