关于水晶报表的几个问题

ffjing 2003-10-15 03:48:23
本菜鸟刚学习VS.Net和水晶报表,使用的是Vs.Net 2003及其自带的水晶报表,有几个问题想请教。
1、关于“登录失败”,谈谈自己的遭遇。
前几天也遇到水晶报表“登陆失败”的问题,看了很多文章,也没解决。结果发现问题出在水晶报表的设计上。
我在设计水晶报表时,用的数据源是数据库表。而我以前做其他项目时曾经创建过一个连接该数据库的ODBC,为了方便,我就选择使用ODBC来连接到数据库进行水晶报表(模板)的设计,结果在程序中就出现了“登陆失败”的问题。
而后来发现在设计水晶报表(模板)时,使用OLE DB进行连接数据库,即使在后台代码中不进行数据库连接,也能连接到数据库。当然,如果要把项目部署到其他机器,数据库连接还是要做的。
不知道有没有人有同样的遭遇,目:

2、关于水晶报表导出。
源代码如下:
Dim oRpt As ReportDocument = New ReportDocument
oRpt.Load(MapPath("olecr.rpt"))

Dim logoninfo As TableLogOnInfo = New TableLogOnInfo
With logoninfo.ConnectionInfo
.ServerName = "server"
.DatabaseName = "traffic"
.UserID = "sa"
.Password = ""
End With
oRpt.Database.Tables(0).ApplyLogOnInfo(logoninfo)
oRpt.ExportToDisk(ExportFormatType.PortableDocFormat, "d:\abc")
oRpt = Nothing
发生一个错误,如下:
文件 E:\...\olecr.rpt 内出错:拒绝访问报表文件。其他程序可能正在使用它。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: CrystalDecisions.CrystalReports.Engine.LoadSaveReportException: 文件 E:\...\olecr.rpt 内出错:拒绝访问报表文件。其他程序可能正在使用它。

3、关于水晶报表打印
源代码:
CrystalReportViewer1.DisplayGroupTree = False
CrystalReportViewer1.DisplayToolbar = False
Dim oRpt As ReportDocument = New ReportDocument
oRpt.Load(MapPath("olecr.rpt"))

Dim logoninfo As TableLogOnInfo = New TableLogOnInfo
With logoninfo.ConnectionInfo
.ServerName = "server"
.DatabaseName = "traffic"
.UserID = "sa"
.Password = ""
End With
oRpt.Database.Tables(0).ApplyLogOnInfo(logoninfo)
'下面这行代码可以去掉
oRpt.PrintOptions.PrinterName = "HP LaserJet 5000 Series PCL 6"
oRpt.PrintToPrinter(1, False, 0, 0)
oRpt = Nothing
错误:
水晶报表能发送到打印机,可是打印机任务列表中该任务状态显示为“错误-正在打印”,不知道什么原因。

很多人说可以调用IE的打印功能进行打印,可是这样怎么进行分页呢?比如一页要打印30条记录。
...全文
59 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
haibodotnet 2003-10-15
  • 打赏
  • 举报
回复
1、导出问题:文件 E:\...\olecr.rpt 内出错:拒绝访问报表文件。其他程序可能正在使用它
oRpt.Load(MapPath("olecr.rpt"),OpenReportMethod.OpenReportByTempCopy)
参考:
Private Sub ExportToDisk(ByVal fileName As String)

Dim diskOpts As New DiskFileDestinationOptions()

' 设置导出格式
Report.ExportOptions.ExportFormatType = _
ExportFormatType.RichText
Report.ExportOptions.ExportDestinationType = _
ExportDestinationType.DiskFile

' 设置磁盘文件选项
diskOpts.DiskFileName = fileName
Report.ExportOptions.DestinationOptions = diskOpts

Report.Export()
End Sub
[C#]
private void ExportToDisk (string fileName)
{
DiskFileDestinationOptions diskOpts = new
DiskFileDestinationOptions();

//s设置导出格式
Report.ExportOptions.ExportFormatType =
ExportFormatType.RichText;
Report.ExportOptions.ExportDestinationType =
ExportDestinationType.DiskFile;

//s设置磁盘文件选项
diskOpts.DiskFileName = fileName;
Report.ExportOptions.DestinationOptions = diskOpts;

Report.Export ();
}
[C++]
static void ExportToDisk (String* fileName)
{
DiskFileDestinationOptions* diskOpts = new
DiskFileDestinationOptions;

//设置导出格式
Report->ExportOptions->ExportFormatType =
ExportFormatType::RichText;
Report->ExportOptions->ExportDestinationType =
ExportDestinationType::DiskFile;

//设置磁盘文件选项
diskOpts->DiskFileName = fileName;
Report->ExportOptions->DestinationOptions = diskOpts;

Report->Export ();
}

2、打印问题:
oRpt.PrintToPrinter(1, False, 0, 0)
只能启动服务器端的打印,客户从远程访问,无法本地打印!
haibodotnet 2003-10-15
  • 打赏
  • 举报
回复
打印,导出这里有教程!

Crystal Reports for Visual Studio .NET高级编程
英文版 Ebook 下载:
http://www.crystaldecisions.com/products/dev_zone/downloads/wrox4_report_integration_web.pdf

市场价: ¥45.00
原书名: Professional Crystal Reports for Visual Studio .NET [原书信息]
原出版社 WROX
作者: David McAmis
译者: 李万红 王军
书号: 7-302-06398-2
页码: 312
开本: 16开
丛书名 清华版WROX公司.NET和Oracle编程经典系列
出版社: 清华大学出版社
出版日期: 2003-4-1

基本信息

--------------------------------------------------------------------------------

  本书特色提挈:●利用Expert创建报表 ●把报表集成到Windows和Web应用程序中 ●创建XML Report Web服务 ●使用ADO.NET ●在报表中使用公式和业务逻辑 ●开发分布式报表应用程序 ●部署报表应用程序
  Crystal Reports是世界领先的用于创建交互式报表的软件包。它为开发人员提供了丰富的工具来开发能够分布到Web或者集成到Windows应用程序中的报表。本书详细介绍了Crystal Reports forVisual Studio.NET的功能,并且说明了如何把报表集成到.NET应用程序中。本书内容主要包括利用Expert创建报表、创建XML报表Web服务、使用ADO.NET、在报表中使用公式和逻辑、开发分布式报表应用程序、部署报表应用程序等。 本书适合于所有希望详细了解Crystal Reports for Visual Studio.NET各项功能的开发人员。Crystal Reports是世界领先的用于创建交互式报表的软件包。它为开发人员提供了丰富的工具来开发能够分布 到Web或者集成到Windows应用程序中的报表。本书详细介绍了Crystal Reports for Visual Studio.NET的功能,并且说明了如何把报表集成到.NET应用程序中。 本书读者对象 本书是为希望详细了解Crystal Reports for Visual Studio.NET的各项功能的开发人员编写的。 本书读者最好已经具备了一定的Crystal Reports使用经验。对于希望了解Visual Studio.NET中包含的这一报表工具的新手,本书也很有帮助。
haibodotnet 2003-10-15
  • 打赏
  • 举报
回复
彻底解决 CrystalReports 登录失败问题(海波.NET,更新:2003-10-16-3)
---------------------------------------------------------------
目录:
一、Crystal Reports 9 最新补丁下载(搜集:海波.NET)
二、问题:CrystalReports 登录失败
三、原因一: NTFS 文件夹权限的问题!
四、原因二:数据库登录问题
五、部署到其它计算机,产生问题:连接失败。错误的登录参数。
六、安全之道:crystalreport 的集成认证如何与NT(2K)SERVER集成??
---------------------------------------------------------------
问题:
CrystalReports 登录失败
LogOnException
---------------------------------------------------------------
Crystal Reports 9 最新补丁下载
(1)Crystal Reports 9 Database and Export Drivers Monthly Hot Fix
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90dbexwin_en.zip.asp?recDnlReq=Record&dnlPath=cr90dbexwin_en.zip
(2)Crystal Reports 9 Developer Files Monthly Hot Fix
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90devwin_en.zip.asp?recDnlReq=Record&dnlPath=cr90devwin_en.zip
(3)Crystal Reports 9.0 Main Program Files Monthly Hot Fix
http://support.crystaldecisions.com/communityCS/FilesAndUpdates/cr90mainwin_en.zip.asp?recDnlReq=Record&dnlPath=cr90mainwin_en.zip
---------------------------------------------------------------
原因一: NTFS 文件夹权限的问题!
文件夹:
VS.NET Crystal Reports:
C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports\Viewers
Crystal Reports 9.2:
C:\Program Files\Common Files\Crystal Decisions\2.0\crystalreportviewers
设置上述文件夹的“安全”,即NTFS 文件夹权限的问题!
1、添加当前用户,比如 Administrator,,权限“写入”;
2、为用户 ASPNET、SYSTEM、匿名用户(通常为 IUSR_MACHINENAME)、经过身份验证的请求用户添加“写入”权限!
---------------------------------------------------------------
原因二:数据库登录问题
PULL 模式下:
在报表的cs文件中,加上数据库连接。
1.TableLogonInfo
.使用TableLogonInfo
Dim ReportDoc As New ReportDocument()
Dim logonInfo As New TableLogonInfo
Dim table As table
ReportDoc.Load("C:\Rpts\publish.rpt")
For Each table IN ReportDoc.DataBase.Tables
logonInfo= table.LogonInfo
with logonInfo.connectioninfo
.serverName= "Localhost"
.Databasename= "pubs"
.UserID= "sa"
.Password=""
End With
table.applyLogonInfo(logonInfo)
next table
Crviewer.reportsource= reportDoc
2.如果是多個相關表格生成的報表,最好以存儲過程為數據源建立報表。
3、调试成功后,可以考虑:
将“数据库连接信息”存放在 web.config 配置文件,容易维护
using CrystalDecisions.Shared ; //负责解释TableLogOnInfo类
using CrystalDecisions.CrystalReports.Engine ; //负责解释ReportDocument类

private void Page_Load(object sender, System.EventArgs e)
{
TableLogOnInfo logOnInfo = new TableLogOnInfo ();
//这里必须事先申明一个ReportDocument对象 Report,同时加载数据报表
ReportDocument oRpt = new ReportDocument();
//获取.rpt文件真实路径
string path;
path=Server.MapPath ("cr.rpt");
oRpt.Load (path);

//从web.config中获取logOnInfo参数信息
string a,b,c,d;
//获取ServerName
a=System.Configuration.ConfigurationSettings.AppSettings ["servername"];
//获取DatabaseName
b=System.Configuration.ConfigurationSettings.AppSettings ["database"];
//获取UserId
c=System.Configuration.ConfigurationSettings.AppSettings ["userid"];
//获取password
d=System.Configuration.ConfigurationSettings.AppSettings ["pass"];
//设置logOnInfo参数
logOnInfo.ConnectionInfo.ServerName = a;
logOnInfo.ConnectionInfo.DatabaseName = b;
logOnInfo.ConnectionInfo.UserID = c;
logOnInfo.ConnectionInfo.Password = d;

oRpt.Database.Tables [0].ApplyLogOnInfo (logOnInfo);

//建立.rpt文件与CryStalReportviewer文件之间的连接
CrystalReportViewer1.ReportSource = oRpt;

DataBind();
}
---------------------------------------------------------------
原因三、PUSH 模式不需要设置 TableLogOnInfo!!!
因为数据源是 DataSet,不是数据库!!!
---------------------------------------------------------------
问题:
部署到其它计算机,产生问题:连接失败。错误的登录参数。
在开发机(2000)上运行,一切正常;移植到生产机(2003),就报错。错误提示:连接失败。错误的登录参数。
解决方案:
部署包少了点东西:
Crystal_Database_Access2003.msm
Crystal_Database_Access2003_chs.msm
这两个合并模块包含各种连接数据源的驱动。所以少了它,就老是提示登录失败(这种提示是不是很莫名其妙?)
---------------------------------------------------------------
附件:
海波.NET
问题:
安全之道:crystalreport 的集成认证如何与NT(2K)SERVER集成??
——————————————————————————————————————
安全三要素:
模拟,验证,授权
——————————————————————————————————————
如果运行 ASP.NET 程序,还需要为 ASPNET 账号——运行 ASP.NET 模拟的账号,做下述设置:

1、通过 Web 访问服务器,访问者默认“模拟”的是——Internet 来宾帐号,账号名:IUSR_计算机名;
2、“IUSR_计算机名”账号要访问 SQL SERVER,必须为该帐号建立“登录”(验证也!);
3、并授予“服务器角色”和“数据库访问许可”、“数据库角色”(授权也)!
——————————————————————————————————————
参考:
1、匿名访问 Web 所模拟的账号
账号名:IUSR_计算机名
全名:Internet 来宾帐号
描述:匿名访问 Internet 信息服务的内置帐号

2、运行 ASP.NET 模拟的账号
账号名:ASPNET
全名:aspnet_wp account
描述:运行 ASP.NET 工作进程的账号

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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