请问:在VC6.0中为什么无法给水晶报表9设置SQL语句

fangxu1999 2008-04-09 08:17:36
加精
我刚刚学习水晶报表,是通过SQL命令创建了一个rpt文件,然后在VC中引用了它。主要是通过程序来实现增加的过滤条件。
主要代码如下:

HRESULT result = m_Report->put_SQLQueryString((_bstr_t)m_strQuerySQL);
CString str = (char*)m_Report->GetSQLQueryString();
TRACE2("%d\n%s\n", result, str);

m_strQuerySQL是根据选择之后的查询SQL,查出的字段和rpt中的那个一样。
可是当这样使用时,发现result值为0,而GetSQLQueryString()的返回值也不是m_strQuerySQL,而是原来的那个。
结果就是报表中产生的数据不是m_strQuerySQL查出来的那个,和rpt文件设计时的一样。
请大家帮帮忙吧。
谢谢了
...全文
773 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianlongzaiyuan 2012-07-13
  • 打赏
  • 举报
回复
利用m_Report->RecordSelectionFormula="{数据库.字段}=参数";就可以实现。借鉴了
《Crystal.Reports水晶报表设计与开发实务》141页的例子。感谢网友的支持。
Arlexovincy 2012-07-03
  • 打赏
  • 举报
回复
我打开都打开不了水晶报表,这是神马情况
analysefirst 2008-08-21
  • 打赏
  • 举报
回复
收藏了,好东东
shakaqrj 2008-04-16
  • 打赏
  • 举报
回复
本版第一个精品帖
up!
内存泄漏 2008-04-10
  • 打赏
  • 举报
回复
参考如下文章:

水晶报表在VC6.0中的使用方法
 
水晶报表是一个报表设计开发的强大工具,功能强大,设计灵活,在水晶报表光盘中只提供了一个完全动态生成报表的例子,使用繁琐。现介绍其在VC++6.0中的简单使用方法。编译环境:VC++6.0 sp5 、Windows 2000 Server sp3 (en)。

  一、导入水晶报表使用的动态联接库:根据实际修改文件路径。

#import "C:\Documents and Settings\Administrator\桌面\cr\craxdrt9.dll" no_namespace

  二、定义接口指针变量

//水晶报表变量

IApplicationPtr m_Application;

IReportPtr m_Report;

//水晶报表控件变量,在对话框中加入该控件

CCrystalReportViewer9 m_CRViewer1;

  三、具体实现步骤

//实例化m_Application

m_Application.CreateInstance (__uuidof(Application));

//获取m_Report变量

//staff.rpt为通过向导建立的报表文件,数据库采用SQL Server 7.0

m_Report =m_Application->OpenReport ("C:\\Documents and Settings\\Administrator\\桌面\\cr\\debug\\staff.rpt");

//设置报表标题

m_Report->put_ReportTitle (_bstr_t("Title"));

//设置数据库连接变量

//数据库服务器(local),数据库名staff,用户名sa,密码sa

m_Report->Database ->Tables ->Item [1]->SetLogOnInfo("(local)","staff","sa","sa");

//设置检索SQL命令

m_Report->put_SQLQueryString ((_bstr_t)"select * from person where id<'4' order by id");

//不显示重复字段

m_Report->PutEnableSelectDistinctRecords (TRUE);

//设置检索条件,采用水晶报表语法,功能同设置检索SQL命令

m_Report->PutRecordSelectionFormula ((_bstr_t)"{person.id}='1'");

//设置报表作者

m_Report->PutReportAuthor ("xiaojin");

//将m_Report与报表控件连接

m_CRViewer1.SetReportSource(m_Report);

//显示报表工具条

m_CRViewer1.SetDisplayToolbar (TRUE);

//不显示报表左边的分组树

m_CRViewer1.SetDisplayGroupTree (FALSE);

//不显示控件边框

m_CRViewer1.SetDisplayBorder (FALSE);

//刷新数据

m_CRViewer1.Refresh ();

//显示报表内容

m_CRViewer1.ViewReport();


这样,漂亮的水晶报表就显示出来了。程序异常处理部分省略,请自行加入。
scq2099yt 2008-04-10
  • 打赏
  • 举报
回复
up
fangxu1999 2008-04-10
  • 打赏
  • 举报
回复
谢谢,我也参考这个例子做了,不过SQL语句送不进去。
在设计rpt时用的是类似于
select * from table1

而在真正的使用时希望使用类似
select * from table1 where condition

无法使用m_Report->put_SQLQueryString给它重新赋值。
我查了很多,发现别人也有类似的问题,put_SQLQueryString不管用。

最后发现使用

m_Report->DiscardSavedData();
m_Report->Database->SetDataSource(pRecordset.GetInterfacePtr());

可以间接的把SQL语句送进去,达到目的。

希望大家以后遇到类似的问题也可以解决
fangxu1999 2008-04-09
  • 打赏
  • 举报
回复
拜托,楼上正经一些!

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧