Frxadoquery и хранимая процедура

отредактировано 16:19 Раздел: FastReport 4.0
Здравствуйте! Есть хранимая процедура, которая в зависимости от параметра возвращает разные датасеты. Засунул ее вызов в frxAdoQuery. Прописал параметры. Проблема в том, что в дизайнере процедура запускается с параметрами NULL, соответственно fieldAliases пуст. Как с этим бороться?

Комментарии

  • gpigpi
    отредактировано 16:19
    Попробуйте привязать параметры к переменным отчёта, для которых можно задать значения по умолчанию
  • отредактировано 16:19
    gpi написал: »
    Попробуйте привязать параметры к переменным отчёта, для которых можно задать значения по умолчанию
    Привязал, все равно в профайлере сиквела параметр null. Может где исходник подправить?
  • gpigpi
    отредактировано 16:19
    Можете привести пример (шаблон + база Access)?
  • отредактировано 16:19
    gpi написал: »
    Можете привести пример (шаблон + база Access)?

    нашел кажется проблему:
    в FrxCustomDB.pas
    procedure frxParamsToTParams(Query: TfrxCustomQuery; Params: TParams);
    var
      i: Integer;
      Item: TfrxParamItem;
    begin
      for i := 0 to Params.Count - 1 do
        if Query.Params.IndexOf(Params[i].Name) <> -1 then
        begin
          Item := Query.Params[Query.Params.IndexOf(Params[i].Name)];
          Params[i].Clear;
          Params[i].DataType := Item.DataType;
          // Bound should be True in design mode }
          if not (Query.IsLoading or Query.IsDesigning) then
            Params[i].Bound := False
          else
          begin
            if Item.Expression <> '' then
              Params[i].Value := Item.Expression;
              Params[i].Value := 0;
            Params[i].Bound := True;
          end;
    
          if Trim(Item.Expression) <> '' then
             if not (Query.IsLoading or Query.IsDesigning) then
              if Query.Report <> nil then
              begin
                Query.Report.CurObject := Query.Name;
                Item.Value := Query.Report.Calc(Item.Expression);
              end;
          if not VarIsEmpty(Item.Value) then
          begin
            Params[i].Bound := True;
            if Params[i].DataType in [ftDate, ftTime, ftDateTime] then
              Params[i].Value := Item.Value
            else
              Params[i].Text := VarToStr(Item.Value);
          end;
    
        end;
    end;
    

    обнуляется параметр
    Params.Value := 0;

    после комментария этой строки вроде работает, но если в значениях параметров есть переменная, то датасет не открывается. Я так понял все через эту строку
    if not (Query.IsLoading or Query.IsDesigning) then
    
    параметр не просчитывается
    Item.Value := Query.Report.Calc(Item.Expression);
    

    Можно это как-то исправить?

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

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