Crystal Reports Delphi 7 VCL - установка CurrentValue для параметра диапазона дат

Я использую Crystal Reports VCL для Delphi 7 для запуска Crystal Reports из Delphi. Я хочу установить текущие значения параметров из этого приложения Delphi. Я успешно отправляю эти значения для числовых или строковых параметров. Но сейчас я борюсь с параметрами даты, которые установили Allow Ranges в True,

Ошибка, которую я получаю: 305:Error converting string to ValueInfo - ParamFields[2].CurrentValues.Add <StrToValueInfo>

Я использую этот код, который, как я уже сказал, работает без параметров диапазона. В коде ниже параметра PARAM_DATE параметр Date, который разрешает диапазоны Любая идея, как передать значения диапазона?

procedure TReportFrame.btnExecuteReportClick(Sender: TObject);
var
    Crpe1 : TCrpe;
    varArr : variant;
    i : integer;
    a : TCrpeParamFieldRangesItem;
    b : TCrpeParamFieldCurrentValuesItem;
begin
  SetCurrentDir( GetCommonFilesPath );
  try
  Crpe1 := TCrpe.Create(Self);
  Crpe1.DiscardSavedData();
  Crpe1.ReportName := getReportBasePath() + reportFileName;

  Crpe1.IgnoreKnownProblems := true;
  Crpe1.LoadEngineOnUse := true;
  Crpe1.Connect.Clear;

  Crpe1.Tables[0].ConnectBuffer := glbDBMan.GetConnectionString;

    Crpe1.ParamByName('PARAM_SORTING_TYPE', EmptyStr).CurrentValue :=  VarToStr( paramSposobSortowania.getSelectedValue());

  varArr := parameterOsobaOdpowiedzialna.getSelectedValues();
  for i := VarArrayLowBound(varArr,1) to VarArrayHighBound(varArr,1) do
  begin
    Crpe1.ParamByName('PARAM_PERSON', EmptyStr).CurrentValues.Add(VarToStr( varArr[i]));
  end;

//  Crpe1.ParamByName('PARAM_DATA_ZLOZENIA_WNIOSKU', EmptyStr).CurrentValues.Add('2012-4-1');
//  a := TCrpeParamFieldRangesItem.Create;
//  a.RangeStart := '2012-4-1';
//  a.RangeEnd := '2012-4-6';
//  Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges.Add();
//  Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges[0].RangeStart := '2012-4-1';
//  Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges[0].RangeEnd := '2012-4-6';

//  Crpe1.ParamByName('PARAM_DATE', EmptyStr).CurrentValues.Add('2012-4-1');

    //PARAM_DATE is a DATE Range
  Crpe1.ParamByName('PARAM_DATE', EmptyStr).CurrentValues.Add('2012-4-1');
  Crpe1.ParamByName('PARAM_DATE', EmptyStr).CurrentValues.Add('2012-4-6');

  if Crpe1.Connect.Test then
    Crpe1.Show
  else
    ShowMessage('Error Connecting');

    Crpe1.DiscardSavedData;

    finally
      SetCurrentDir( ExtractFileDir(ParamStr(0)) );
    end;
end;

2 ответа

Решение
Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges.Add();
Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges[0].RangeStart := '2012,4,1';
Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges[0].RangeEnd := '2012,4,6';

ОБНОВЛЕНИЕ: в VCL есть функция (file: UCrpeUtl) с именем CrDateToStr, которая принимает TDateTime и возвращает этот формат строки даты.

Вы пробовали что-то подобное?

i:= Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges.Add();
Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges.Items[i].RangeStart := '2012-4-1';
Crpe1.ParamByName('PARAM_DATE', EmptyStr).Ranges.Itens[i].RangeEnd := '2012-4-6';
Другие вопросы по тегам