CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

水晶报表问题?

楼主sandanNet()2003-11-01 08:57:42 在 .NET技术 / VB.NET 提问

不知是水晶报表烂还是我没弄清楚,发现用水晶报表太不稳定,时不时就有问题出现,以前连接时老友登陆对话框弹出,随便怎么填写总是登陆失败,后来也不知道是如何搞定的(一团迷雾),昨天用了多表查询,又出现了登陆对话框,又是登陆失败,水晶报表太难玩了。请大侠们赐教!!!! 问题点数:0、回复次数:17Top

1 楼sandanNet()回复于 2003-11-01 09:00:01 得分 0

我还参考了vb.net资源工具包里的例子,发现他都没用dataset1.xsd架构,可能有n中实现方法把.Top

2 楼lz305(猎人【有型有款,有车有房。唯独没老婆】)回复于 2003-11-01 09:01:13 得分 0

.NET环境下水晶报表使用总结  
   
  水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。  
   
     
   
  一、在使用自带的水晶报表时,请注册,否则只能使用30次  
   
  水晶报表注册码  
  注册号:6707437608  
  密码:AAP5GKS0000GDE100DS  
   
     
   
  二、使用CrystalReportViewer进行预览  
   
  CrystalReportViewer控件允许在应用程序中查看   Crystal   Report。ReportSource   属性用于设置要查看哪个报表。该属性设置之后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径,也可以是强类型报表。  
   
  1.             打开“工具箱”,并将一个   CrystalReportViewer   拖到窗体上,我们命名为rptVew。    
   
  2.             通过拖放操作将   Windows   窗体查看器调整到希望的大小并将其移动到所需位置。    
   
  3.             当运行应用程序时,报表将显示在查看器中。  
   
  三、创建新报表  
   
  1.             指向“添加”,单击“添加新项”。    
   
  2.             在“添加新项”对话框中,从“模板”区域选择   Crystal   Report,将报表命名为rptClient,单击“打开”。    
   
  3.             在   Crystal   Report   库中,选择下列选项之一:    
   
  ·                   使用报表专家   —   指导您完成报表的创建过程,并将您的选择添加到   Crystal   Report   Designer。    
   
  ·                   作为空白报表   —   打开   Crystal   Report   Designer。    
   
  ·                   来自于现有的报表   —   创建新报表,它与指定的另一报表设计相同。    
   
  注意       Crystal   Report   库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方法适合您的需要。  
   
  4.             单击“确定”按钮。    
   
  如果选择使用“报表专家”,便会出现“报表专家”对话框,并带有数据资源管理器。为每个文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,然后单击“完成”来访问   Crystal   Report   Designer   和您的报表  
   
  四、是否需要动态设置数据源?  
   
  Crystal   Reports   通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。    
   
  拉和推模型  
  为了向开发人员提供最灵活的数据访问方法,Crystal   Reports   数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。    
   
  拉模型  
   
   
   
   
  在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的   SQL   命令都同时由   Crystal   Reports   本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。  
   
  推模型  
   
   
  相反,推模型需要开发人员编写代码以连接到数据库,执行   SQL   命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在   Crystal   Reports   收到数据之前先将数据筛选出来。    
   
  四、从   ADO.NET   数据集制作报表  
   
  从数据库创建数据集对象    
   
  1.             在项目中新建一个架构文件:    
   
  a.             在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。    
   
  b.             在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。    
   
  c.             在“模板”区域选择“数据集”。    
   
  d.             接受默认名称   Dataset1.xsd。    
   
  这就创建了一个新的架构文件   (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在   ADO.NET   数据集设计器中。    
   
  2.             指定数据库位置:    
   
  a.             在服务器资源管理器中,右击“数据连接”并选择“添加连接”。    
   
  b.             在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如   Microsoft   OLE   DB   Provider   for   SQL   Server)。    
   
  c.             单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。    
   
  d.             单击“确定”按钮。    
   
  此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。    
   
  3.             在解决方案资源管理器中,双击   Dataset1.xsd   (如果它尚不是活动视图)。    
   
  Dataset1.xsd   现在应显示在“数据集”选项卡中。    
   
  4.             若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到   Dataset1.xsd   的“数据集”选项卡上。    
   
  5.             单击“保存   Dataset1.xsd”来保存“Dataset1.xsd”文件。    
   
  6.             在“生成”菜单上,单击“生成”为项目生成数据集对象。    
   
  ADO.NET   数据集对象提供数据的描述,从它可以向   Crystal   report   添加表。使用   Crystal   Report   Designer   中的“数据库专家”从   ADO.NET   数据集对象添加表。    
   
  请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用   ADO.NET   建立好的报表中访问“数据库专家”,请在   Report   Designer   中右击,指向“数据库”,然后单击“添加/删除数据库”。  
   
  将报表连接到   ADO.NET   数据集对象    
   
  1.             在“数据库专家”中,展开“项目数据”文件夹。    
   
  2.             展开“ADO.NET   数据集”文件夹。    
   
  3.             选择所需数据集对象。    
   
  例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。    
   
  4.             选择要向报表中添加的表,和使用其他数据源一样。    
   
     
   
     
   
     
   
     
   
     
   
     
   
     
   
     
   
     
   
     
   
  五、动态改变数据源的代码  
   
     
   
                                Dim   dsdataSet   As   New   DataSet()  
   
                                  Dim   oRpt   As   New   rptClient()       '已建立的报表rptClient  
   
                                  请读者自行填充数据集dsdataSet    
   
                                  '使用“报表引擎”对象模型将填充的数据集,传递给报表  
   
                                  oRpt.SetDataSource(dsdataSet.Tables(0))  
   
                                  '   将带有数据的报表对象绑定到   Windows   窗体查看器,rptVew(CrystalReportViewer控件)  
   
                                  rptVew.ReportSource   =   oRpt  
   
  注意       FillDataSet   方法可连接到指定的数据库,提取数据,然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中,请使用   SQL   JOIN   语句将这些表联接在一起;然后在   FillDataSet   方法中指定一个结果表  
   
  六、创建主从报表  
   
  在报表中,有许多报表是主从表结构,比如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个字段关联起来,这种报表可利用其分组功能实现,  
   
  1.             新建一个工程  
   
  2.             往FORM1中添加一个CrystalReportViewer控件  
   
  3.             在服务噐资源管理器中连接到SQL   SERVER   2000上的Northwind数据库  
   
  4.             添加一个数据集Dataset1,将服务器资源管理器中的Orders和   Order   Details加入到数据集中。  
   
  5.             添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders和   Order   Details,“链接”中是关联字段的链接,在“字段”中选择要显示的主表和明细表的字段,组中选择分组依据为Orders表OrdersID字段,总计,图表,选择(可进行筛选),样式(可设置报表标题),可自行设置。设置完后,点击完成。  
   
  6.             在报表设计器中调整需要显示的字段的位置、宽度等。  
   
  7.             在窗口中添加代码。  
   
          Private   Sub   Form1_Load(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   MyBase.Load  
   
                  Dim   oRpt   As   New   CrystalReport1()  
   
                  Dim   dsdataSet   As   New   Dataset1()  
   
     
   
                  Dim   CN   As   New   Data.SqlClient.SqlConnection("data   source=PMSERVER;initial   catalog=Northwind;user   id=sa;password=sa")  
   
                  CN.Open()  
   
                  Dim   daOrders   As   New   Data.SqlClient.SqlDataAdapter("select   *   from   orders",   CN)  
   
                  daOrders.Fill(dsdataSet,   "orders")  
   
     
   
                  Dim   daDetails   As   New   Data.SqlClient.SqlDataAdapter("select   *   from   [Order   Details]",   CN)  
   
                  daDetails.Fill(dsdataSet,   "Order   Details")  
   
     
   
                  '使用“报表引擎”对象模型将填充的数据集,传递给报表  
   
                  oRpt.SetDataSource(dsdataSet)  
   
                  CrystalReportViewer1.ReportSource   =   oRpt  
   
          End   Sub  
   
  8、运行程序  
   
   
   
   
   
     
   
  七、用程序改变报表中text的文本  
   
  代码如下:  
   
                                  Dim   GetTextObject   As   TextObject  
   
                                  '   按名称获取   ReportObject,将其转换为   TextObject,并返回此对象。  
   
                                  GetTextObject   =   orpt.ReportDefinition.ReportObjects.Item("text13")  
   
                                  GetTextObject.Text   =   "XXXX系统"  
   
     
   
  总结:水晶报表具有非常强大的功能,还可进行导出WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的利器。  
   
     
   
  (此文部分资料来自MSDN)  
   
  Author:李洪根  
   
  E-MAIL:lihonggen0@163.com      
   
  Top

3 楼sandanNet()回复于 2003-11-01 09:15:47 得分 0

lz305(vincoer)   :谢谢你的回复,但是你所介绍的方法早就用过了,不行,总有数据库登陆对话框弹出来,我好郁闷。。。。。。Top

4 楼sandanNet()回复于 2003-11-01 09:32:22 得分 0

现在发现用多表生成是就会出现登陆对话框Top

5 楼sandanNet()回复于 2003-11-01 10:24:09 得分 0

多表操作中,我设置好了关键字连接,但是,就是不出数据,具体代码如下:  
  Dim   CN   As   New   Data.SqlClient.SqlConnection("Data   Source=localhost;Integrated   Security=SSPI;Initial   Catalog=Northwind")  
                          CN.Open()  
                          Dim   daOrders   As   New   Data.SqlClient.SqlDataAdapter("select   *   from   orders",   CN)  
                          daOrders.Fill(objDt,   "orders")  
                          Dim   daDetails   As   New   Data.SqlClient.SqlDataAdapter("select   *   from   Orders   Details",   CN)  
                          daDetails.Fill(objDt,   "customer")  
                          rpt.SetDataSource(objDt)  
                          Me.CrystalReportViewer1.ReportSource   =   rpt  
  其中表orders和customer里面可以通过customerid来关联,我不知道这样做是否等同于:  
  select   *   from   customers   as   a,orders   as   b   where   a.customerID=b.customerID?Top

6 楼csmmn3(傻瓜顶呱呱)回复于 2003-11-02 01:41:04 得分 0

建立强制数据集,就不会啦Top

7 楼dong12()回复于 2003-11-02 12:29:50 得分 0

怎么注册报表呀Top

8 楼sandanNet()回复于 2003-11-02 23:06:44 得分 0

请教高手阿,到底该如何用ado.net来实现多表的访问,我想用dataset来实现,但不想填充两个表,到底该如何实现,或者给个方法,多表访问取数据时在报表中该如何做呢?我要崩溃了Top

9 楼haibodotnet(海波.NET)回复于 2003-11-03 09:04:52 得分 0

用查询连结多个表……Top

10 楼sandanNet()回复于 2003-11-03 19:57:01 得分 0

"用查询连结多个表……?"如何实现呢  
  Top

11 楼drk928(一起看斜阳)回复于 2003-11-03 20:00:56 得分 0

一个报表可以由一个DATASET文件作数据源,而一个dataset可以说是一个数据库...多表问题当然没有问题....做报表怎么会出现登录框问题呢?所以不要直接连接到数据库来作数据源嘛,那样太死了.习惯用DATASET结构来作数据源..Top

12 楼sandanNet()回复于 2003-11-03 23:11:50 得分 0

to     drk928:我知道呀,我就是这么做的,我的意思是,我从两个表里选出数据,当然是两个关联表,也是填充到dataset里的,但是现在这样做的花就会出现数据库登录框,我改为从一个表区数据就正常了。Top

13 楼haibodotnet(海波.NET)回复于 2003-11-04 10:34:41 得分 0

在   SQL   Server   新建一个查询,然后可视化设计……Top

14 楼lionqun(兔子)回复于 2003-11-04 13:48:01 得分 0

我以前也愈见过这种问题  
  跟机器有关  
   
  同一个程序,有的机器就不出现!有的机器就死活都出现!  
  不知道为什么Top

15 楼sandanNet()回复于 2003-11-04 22:21:09 得分 0

不知道,打包以后会出现这种问题吗?如果有的话,岂不是crystal   report太不稳定了,希望那位高手给出原因......Top

16 楼haibodotnet(海波.NET)回复于 2003-11-05 10:32:25 得分 0

彻底解决   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   工作进程的账号  
  Top

17 楼pthbz(黄正)回复于 2003-11-05 10:50:03 得分 0

CrystalReportViewer的打印,在打印对话框中打印份数不管填写多少份,只能打出一份,如何打印多份呢?Top

相关问题

  • 水晶报表
  • 水晶报表!
  • 水晶报表
  • 水晶报表?
  • 水晶报表
  • 水晶报表
  • 水晶报表
  • 水晶报表
  • 水晶报表
  • 水晶报表

关键词

  • .net
  • ado.net
  • asp.net
  • 报表
  • 数据库
  • 数据
  • 水晶报表
  • 字段
  • 连接
  • 文件夹

得分解答快速导航

  • 帖主:sandanNet

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo