-
Привет! Столкнулся с такой проблемой... как только не пробовал... только не так как надо. не могу получить выходные параметры из хранимой процедуры бд на Firebird/ сама процедура в IBExpert работает: вот код Код: [CODE] create or alter procedure PR_READ_DATA_PERS ( TAB_PERS integer) returns ( R_TAB_PERS integer, R_FAM_PERS varchar(30), R_NAME_PERS varchar(30), R_LAST_NAME_PERS varchar(30), R_TOWN_PERS varchar(30), R_STREET_PERS varchar(30), R_HOUSE_PERS varchar(10), R_KVART_PERS varchar(10), R_BIRTH_PERS date, R_KOLONA_PERS smallint, R_POST_PERS integer, R_MOTION_PERS integer, R_KLASS_PERS smallint, R_TRACT_PERS integer, R_DATE_PERS date) as begin select PERSONAL.p_tab, PERSONAL.P_FAMILY, PERSONAL.P_NAME, PERSONAL.P_LASTNAME, PERSONAL_DATA.PD_TOWN, PERSONAL_DATA.PD_STREET, PERSONAL_DATA.PD_HOUSE,personal_data.pd_kvart, PERSONAL_DATA.P_BIRTH, PERSONAL_DATA2.PD_KOLONA, personal_data2.pd_post, personal_data2.pd_motion, PERSONAL_DATA2.PD_KLASS, personal_data2.pd_traction, PERSONAL_DATA2.PD_DATE from personal,personal_data,personal_data2 where (personal.p_tab=:Tab_pers) and (personal_data.pd_tab=:tab_pers) and (personal_data2.pd_tab=:tab_pers) into :R_TAB_PERS, :R_FAM_PERS,:R_NAME_PERS,:R_LAST_NAME_PERS,:R_TOWN _PERS,:R_STREET_PERS,:R_HOUSE_PERS,:R_KVART_PERS,: R_BIRTH_PERS,:r_kolona_pers,:R_POST_PERS,:r_motion _pers,:r_klass_pers,:R_TRACT_PERS,:r_date_pers; end [/CODE] Тут, занчаит один входящий парметр и ряд выходящик параметров.
на делфи пробую вызов так: Код: [CODE] StoredProcReadPersProc.Active; StoredProcReadPersProc.StoredProcName:='PR_READ_DA TA_PERS'; StoredProcReadPersProc.Params.Add; StoredProcReadPersProc.Params.Items[0].Name:= 'TAB_PERS'; //StoredProcReadPersProc.Params[0].AsInteger:=QueryViewPers.FieldByName('P_TAB').A sI nteger; StoredProcReadPersProc.Params.ParamValues['TAB_PERS']:= QueryViewPers.FieldByName('P_TAB').AsInteger; StoredProcReadPersProc.Params.Add; StoredProcReadPersProc.Params.Items[1].Name:='R_FAM_PERS'; showmessage(StoredProcReadPersProc.ParamByName('TA B_PERS').AsString); StoredProcReadPersProc.Prepare; StoredProcReadPersProc.ExecProc;
//StoredProcReadPersProc.Params.AddParam( s:=StoredProcReadPersProc.ParamByName('R_FAM_PERS' ).Value; showmessage(s); [/CODE] как получить все эти выходные параметры...?
спасибо!
-
select * from PR_READ_DA TA_PERS либо ExecWP
-
а где SUSPEND в ХП?
-
> а где SUSPEND в ХП?
у меня там одна строка должна быть вот фрагмент в IBExpert
------ Performance info ------ Prepare time = 0ms Execute time = 46ms Current memory = 34 350 116 Max memory = 34 704 024 Memory buffers = 2 048 Reads from disk to cache = 21 Writes from cache to disk = 0 Fetches from cache = 741
Результаты выполнения процедуры:
R_TAB_PERS = 2 R_FAM_PERS = Абдулаев R_NAME_PERS = Шамил R_LAST_NAME_PERS = Исрефилович R_TOWN_PERS = R_STREET_PERS = R_HOUSE_PERS = R_KVART_PERS = R_BIRTH_PERS = R_KOLONA_PERS = 7 R_POST_PERS = 2 R_MOTION_PERS = 1 R_KLASS_PERS = 1 R_TRACT_PERS = 2 R_DATE_PERS = 26.01.1989
-
StoredProcReadPersProc.Active;
StoredProcReadPersProc.StoredProcName:='PR_READ_DA TA_PERS';
StoredProcReadPersProc.Params.Add;
StoredProcReadPersProc.Params.Items[0].Name:= 'TAB_PERS';
StoredProcReadPersProc.Params.ParamValues['TAB_PERS']:= QueryViewPers.FieldByName('P_TAB').AsInteger;
StoredProcReadPersProc.Params.Add;
StoredProcReadPersProc.Params.Items[1].Name:='R_FAM_PERS'; Мрак
-
> Ega23 © (29.12.11 19:19) [4] > StoredProcReadPersProc.Active;StoredProcReadPersProc.StoredProcName: > ='PR_READ_DA TA_PERS';StoredProcReadPersProc.Params.Add; > StoredProcReadPersProc.Params.Items[0].Name:= 'TAB_PERS'; > //StoredProcReadPersProc.Params[0].AsInteger:=QueryViewPers. > FieldByName('P_TAB').A sI nteger;StoredProcReadPersProc. > Params.ParamValues['TAB_PERS']:= QueryViewPers.FieldByName('P_TAB'). > AsInteger;StoredProcReadPersProc.Params.Add;StoredProcReadPersProc. > Params.Items[1].Name:='R_FAM_PERS';Мрак
допустим...... а как надо?
-
если делать так Код:
StoredProcReadPersProc.Active; StoredProcReadPersProc.StoredProcName:='PR_READ_DATA_PERS'; StoredProcReadPersProc.Params.ParamValues['TAB_PERS']:= QueryViewPers.FieldByName('P_TAB').AsInteger; StoredProcReadPersProc.Prepare; StoredProcReadPersProc.ExecProc;
выдает ошибку StoredProcReadPersProc: Parameter 'TAB_PERS' not found
-
> > StoredProcReadPersProc.Active; >
Это что за маразм, такой?
-
Возможно придется ParamType указывать:
...
StoredProcReadPersProc.Params.Add;
StoredProcReadPersProc.Params.Items[0].Name:= 'TAB_PERS';
StoredProcReadPersProc.Params.Items[0].ParamType:= ptInput;
...
StoredProcReadPersProc.Params.Items[1].Name:='R_FAM_PERS';
StoredProcReadPersProc.Params.Items[1].ParamType:= ptOutput;
...
-
Вот так попробуй: StoredProcReadPersProc.StoredProcName := 'PR_READ_DATA_PERS';
StoredProcReadPersProc.Prepare;
StoredProcReadPersProc.Params.ParamByName('TAB_PERS') := QueryViewPers.FieldByName('P_TAB').AsInteger;
StoredProcReadPersProc.ExecProc; после Prepare список параметров сгенерируется автоматически...
-
> Виталий Панасенко (29.12.11 18:17) [2] > а где SUSPEND в ХП?
Он не нужет если результат работы ХП будет считываться через выходные параметры (как в примере у ТС). А вот, если результат будет использоваться как набор данных в запросе, тогда да...
-
> asail © (31.12.11 22:01) [9]
В StoredProcReadPersProc.Params.ParamByName Params лишнее...
|