VC+CrystalReport的真正实现

最近搞VC编程,用到一个水晶报表控件CCrystalReportViewer9,与一般不同(水晶报表控件连接数据库,然后自动显示报表,一个例子被传载了无数边 但是没有几个是能真正运行的代码 害人不浅 有感于此特写此文)。

 本人不用水晶报表连接数据库,而是直接读取共享内存的数据,然后再写入CCrystalReportViewer9控件,以显示报表,没有数据库所以只能用此模式:数据库字段无从引用则只好用公式字段代替数据库字段--似乎大材小用了CrystalReport,但是这确实是水晶报表的一个缺陷--没有考虑到此种情况下的报表的简单制作--个人愚见(另外本人认为读取共享内存的情况似乎用的非常多),若有高手不同此意 请随意发表见解 感激不尽 QQ:464658207.

 经过半月的试验,基本框架已经实现,大致代码如下。

 主要代码如下:

    m_Application.CreateInstance (__uuidof(Application));//创建Crystal实例指针.
    m_Report = m_Application->OpenReport ("C://Documents and Settings//Administrator//桌面//WFB.rpt");//打开Cyrstal表实例.   

    m_Report->PutEnableSelectDistinctRecords (TRUE);//属性设置:鼠标可点击选择记录 .
    m_Report->PutReportAuthor ("ZspKing");//属性:作者.
    m_CRViewer1.SetReportSource(m_Report);//  将打开的实例句柄与空间相连接.

 

    //水晶报表的数据库字段用公式字段代替。
    IFormulaFieldDefinitionsPtr m_FormulaFields = m_Report->GetFormulaFields( );
    IFormulaFieldDefinitionPtr m_FormulaField[10];

 

   String stationName;

   从内存读取数据的放入var--数据类型要转换为CString型 也可以是其他字符串型。

   stationName.Format(_T("stringVar x:='%s';x"),var); //要写入公式字段的值.

   m_FormulaField[1]=m_FormulaFields->GetItemByName((_bstr_t)"StationName");//通过公式字段对像获取实际表上的某公式字段指针,此是通过名字获取,也可通过其他方式,可查对应的控件生成文件,详情略.
   if (m_FormulaField[1])
   {           
       m_FormulaField[1]->PutText((_bstr_t)stationName);//将文字写入对应的公式字段框中.        
   }

 

//显示水晶报表。

m_CRViewer1.Refresh();
m_CRViewer1.ViewReport();

  

一点点小技巧,各位朋友见笑了,如有更好的办法 希望不吝赐教指点一二,不胜感激.可以随便发表言论.或加我QQ:464658207.随时候教.

本文系本人 周世鹏 原创,如有转载或疑问,请随时通知本人.邮箱:zsp5@126.com.原文发表于2009年5月4日,于2010年3月16日修改.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值