Конференция "Базы" » Delphi, Firebird, Procedure [D7, IB6.x]
 
  • crossmark (29.12.11 17:25) [0]
    Привет!
    Столкнулся с такой проблемой... как только не пробовал... только не так как надо.
    не могу получить выходные параметры из хранимой процедуры бд на 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]
    как получить все эти выходные параметры...?

    спасибо!
  • Виталий Панасенко (29.12.11 18:16) [1]
    select * from PR_READ_DA TA_PERS либо ExecWP
  • Виталий Панасенко (29.12.11 18:17) [2]
    а где SUSPEND в ХП?
  • crossmark (29.12.11 18:45) [3]

    > а где 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
  • 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';



    Мрак
  • crossmark (29.12.11 19:28) [5]

    > 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';Мрак


    допустим...... а как надо?
  • crossmark (29.12.11 20:03) [6]
    если делать так
    Код:

    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
  • Плохиш © (29.12.11 23:13) [7]

    >
    > StoredProcReadPersProc.Active;
    >

    Это что за маразм, такой?
  • makz (30.12.11 04:57) [8]
    Возможно придется 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;
    ...

  • asail © (31.12.11 22:01) [9]
    Вот так попробуй:

    StoredProcReadPersProc.StoredProcName := 'PR_READ_DATA_PERS';
    StoredProcReadPersProc.Prepare;
    StoredProcReadPersProc.Params.ParamByName('TAB_PERS') := QueryViewPers.FieldByName('P_TAB').AsInteger;
    StoredProcReadPersProc.ExecProc;


    после Prepare список параметров сгенерируется автоматически...
  • asail © (31.12.11 22:04) [10]

    > Виталий Панасенко   (29.12.11 18:17) [2]
    > а где SUSPEND в ХП?

    Он не нужет если результат работы ХП будет считываться через выходные параметры (как в примере у ТС). А вот, если результат будет использоваться как набор данных в запросе, тогда да...
  • asail © (31.12.11 22:05) [11]

    > asail ©   (31.12.11 22:01) [9]

    В StoredProcReadPersProc.Params.ParamByName Params лишнее...
 
Конференция "Базы" » Delphi, Firebird, Procedure [D7, IB6.x]
Есть новые Нет новых   [134431   +11][b:0][p:0.001]