首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水晶报告Delphi 7 VCL -设置数据范围参数的CurrentValue

水晶报告Delphi 7 VCL -设置数据范围参数的CurrentValue
EN

Stack Overflow用户
提问于 2012-04-24 12:44:50
回答 2查看 2.8K关注 0票数 1

我使用用于Delphi 7的Crystal Reports VCL从Delphi运行水晶报表。我想从这个Delphi应用程序中设置当前的参数值。我成功地为数字或字符串参数发送了这个值。但是,现在我正在与将Allow Ranges设置为True的日期参数进行斗争。

得到的错误是:305:Error converting string to ValueInfo - ParamFields[2].CurrentValues.Add <StrToValueInfo>

我正在使用这个代码,就像我说的,它不适用于任何范围参数。在参数下面的代码中,PARAM_DATE是一个允许范围的日期参数。知道如何传递范围值吗?

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-25 07:14:07

代码语言:javascript
复制
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';

UPDATE: VCL (file: UCrpeUtl)中有一个名为CrDateToStr的函数,它接受TDateTime并返回日期字符串的这种格式。

票数 0
EN

Stack Overflow用户

发布于 2012-04-24 17:40:15

你试过这样的东西吗?

代码语言:javascript
复制
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';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10298075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档