Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Crystal Reports Delphi 7 VCL-设置日期范围参数的CurrentValue_Delphi_Parameters_Crystal Reports_Report_Vcl - Fatal编程技术网

Crystal Reports Delphi 7 VCL-设置日期范围参数的CurrentValue

Crystal Reports Delphi 7 VCL-设置日期范围参数的CurrentValue,delphi,parameters,crystal-reports,report,vcl,Delphi,Parameters,Crystal Reports,Report,Vcl,我使用Crystal Reports VCL for Delphi 7从Delphi运行Crystal Reports。我想从这个Delphi应用程序中设置当前参数值。我成功地发送了数字或字符串参数的值。但现在,我正在努力处理将允许范围设置为True的日期参数 im获取的错误为:305:将字符串转换为ValueInfo-ParamFields[2]时出错。CurrentValues.Add 我使用的代码就像我说的,不适用于范围参数。在下面的代码中,参数PARAM_DATE是一个日期参数,它允许范

我使用Crystal Reports VCL for Delphi 7从Delphi运行Crystal Reports。我想从这个Delphi应用程序中设置当前参数值。我成功地发送了数字或字符串参数的值。但现在,我正在努力处理将允许范围设置为True的日期参数

im获取的错误为:305:将字符串转换为ValueInfo-ParamFields[2]时出错。CurrentValues.Add

我使用的代码就像我说的,不适用于范围参数。在下面的代码中,参数PARAM_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;

你试过这样的吗

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';

更新:VCL文件中有一个名为CrDateToStr的函数:UCrpeUtl,它接受TDateTime并返回此格式的日期字符串。

OK我发现如果我将日期设置为此格式2012,4,7逗号,而不是减号,它会起作用。但这样我只能传递一个值。我仍然无法通过一个范围…在delphi项目中使用FastReport而不是Crystal Report。FastReport比CR更简单、更快。是的,尝试过了。最后,在我用逗号替换负号后,它开始工作。
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';