加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在Delphi 2007应用程序中显示Crystal XI报告?

发布时间:2020-12-15 09:39:18 所属栏目:大数据 来源:网络整理
导读:Delphi的最新Crystal XI组件是为Delphi 7发布的.该VCL组件在D2007中编译,但在运行时给出了错误.在Delphi 2007应用程序中显示数据库连接的Crystal Report的最佳方法是什么? 解决方法 这是我发现的使用ActiveX的解决方案: 首先,注册Active X控件,如下所示:
Delphi的最新Crystal XI组件是为Delphi 7发布的.该VCL组件在D2007中编译,但在运行时给出了错误.在Delphi 2007应用程序中显示数据库连接的Crystal Report的最佳方法是什么?

解决方法

这是我发现的使用ActiveX的解决方案:

首先,注册Active X控件,如下所示:

在Delphi中,选择Component – >导入组件

单击“类型库”,单击“下一步”

选择“Crystal ActiveX Report Viewer Library 11.5”

选择你想要的任何调色板页面(我选择了“数据访问”)

选择导入位置

退出向导

将您选择的位置添加到项目搜索路径中

现在这个代码应该工作:

...
uses
  CrystalActiveXReportViewerLib11_5_TLB,OleAuto;
...

procedure TForm1.Button1Click(Sender: TObject);
var
  cry : TCrystalActiveXReportViewer;
  oRpt,oApp : variant;
  i : integer;
  frm : TForm;
begin
  cry := TCrystalActiveXReportViewer.Create(Self);
  oApp := CreateOleObject('CrystalRuntime.Application');
  oRpt := oApp.OpenReport('c:my_report.rpt',1);
  for i := 1 to oRpt.Database.Tables.Count do begin
    oRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := 'username';
    oRpt.Database.Tables[i].ConnectionProperties.Item['Password'] := 'password';
  end;

  frm := TForm.Create(Self);
  try
    cry.Parent := frm;
    cry.Align := alClient;
    cry.ReportSource := oRpt;
    cry.ViewReport;
    frm.Position := poOwnerFormCenter;
    frm.ShowModal;
  finally
    FreeAndNil(frm);
  end;  //try-finally
end;

procedure TForm1.btnExportClick(Sender: TObject);
var
  cry : TCrystalActiveXReportViewer;
  oRpt,oApp : variant;
  i : integer;
begin
  //Export the report to a file
  cry := TCrystalActiveXReportViewer.Create(Self);
  oApp := CreateOleObject('CrystalRuntime.Application');
  oRpt := oApp.OpenReport(c_DBRpt,1);
  for i := 1 to oRpt.Database.Tables.Count do begin
    oRpt.Database.Tables[i].ConnectionProperties.Item['User ID'] := 'username';
    oRpt.Database.Tables[i].ConnectionProperties.Item['Password'] := 'password';
  end;

  oRpt.ExportOptions.FormatType := 29;  //excel 8
  oRpt.ExportOptions.DiskFileName := 'c:output.xls';
  oRpt.ExportOptions.DestinationType := 1;  //file destination
  //Export(False) => do NOT prompt.
  //Export(True) will give runtime prompts for export options.
  oRpt.Export(False);
end;

如果你使用这个方法,那么this (rather dense) reference将会有所帮助,特别是因为Intellisense不适用于像这样的Ole对象.

编辑:引用的原始链接断开,因此我将其更改为指向新的(从2009年12月15日起生效).如果新的那个破了,那么Google should be able to find it.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读