Хранимая процедура в Tfrxadoquery

отредактировано 02:35 Раздел: FastReport VCL
Добрый день.

Создал отчет, внутри которого во вкладку Data помещен компонент TfrxADOQuery. Там прописан вызов хранимой процедуры (MS SQL), которая имеет два результирующих набора. У обыкновенного TADOQuery есть фунцкия NextRecordset, чтобы указать компоненту что выборка будет происходить со следующего набора.

Есть ли аналог такой функции у TfrxADOQuery или как получить поля и данные из второго набора хранимки в TfrxADOQuery? Очень важно, чтобы это было реализовано в самом fr3 отчете.

Спасибо.

Комментарии

  • отредактировано 02:35
    я не спец но у возврат данных может быть только один.
    как вариант переписать вашу процедуру так что данные передаются во временную таблицу #tab1 и #tab2

    в первом query вызов процедуры и select * from #tab1
    а во втором query select * from #tab2

    и все.
    таблици могут быть как созданы зарание так и в процебуре
  • gpigpi
    отредактировано February 2022
    Попробуйте внести изменения в frxADORTTI.pas
    constructor TFunctions.Create(AScript: TfsScript);
    begin
      inherited Create(AScript);
      with AScript do
      begin
        AddEnum('TADOLockType', 'ltUnspecified, ltReadOnly, ltPessimistic, ltOptimistic, ltBatchOptimistic');
        with AddClass(TfrxADODatabase, 'TfrxCustomDatabase') do
          AddProperty('Database', 'TADOConnection', GetProp, nil);
        with AddClass(TfrxADOTable, 'TfrxCustomTable') do
          AddProperty('Table', 'TADOTable', GetProp, nil);
        with AddClass(TfrxADOQuery, 'TfrxCustomQuery') do
        begin
          AddMethod('procedure ExecSQL', CallMethod);
          AddMethod('procedure NextRecordset', CallMethod);
          AddProperty('Query', 'TADOQuery', GetProp, nil);
        end;
      end;
    end;
    
    function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
      const MethodName: String; Caller: TfsMethodHelper): Variant;
    begin
      Result := 0;
    
      if ClassType = TfrxADOQuery then
      begin
        if MethodName = 'EXECSQL' then
        begin
          TfrxADOQuery(Instance).UpdateParams;
          TfrxADOQuery(Instance).Query.ExecSQL
        end
      else if MethodName = 'NEXTRECORDSET' then
          TfrxADOQuery(Instance).Query.Recordset := TfrxADOQuery(Instance).Query.NextRecordset(RecAff);
      end;
    
  • mvbmvb Казань

    Здравствуйте! Лучше поздно, чем никогда! Спасибо, так работает!

    А в официальную версию изменения войдут? Или после обновления каждый раз надо правки восстанавливать?

  • mvbmvb Казань

    Простите, не сюда написал )

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.