报表中主要有关pull和push两种模式,用push时我所知道的就是结合dataset来使用,因为这样可以用代码控制server="";database="";user id=""; password=""等项,以提高可移植性(对于push方法各位如有何高建,望指教)
   我最主要想问的是报表的pull方法的运用,我只知道起初在连接数据库的时候就将server="";database="";user id=""; password=""等各项写定,要不在显示报表时将会在加载数据时
弹出一个页面来要求填写server="";database="";user id=""; password=""等项;请问这个弹出页面的问题要如何解决呢?(不是写死的那种,因为那将不利于程序的移植)

解决方案 »

  1.   

    ReportDocument有个SetDatabaseLogon 函数
    报表对象在被Report viewer使用之前,调用这个函数,设置database:)
      

  2.   

    运行时登录数据库服务器的方法(PULL 模式)
    在报表的cs文件中,加上数据库连接。
    1、设置 ReportDocument 的 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
      

  3.   

    没有更完整的例子了,我们常用的都是push模式,你把上面的示例代码写在报表加载之前,就可以设置连接信息。(这里假设你是知道如何设计报表的,不然你还是找些基础资料先看看)
      

  4.   

    但是按照上面的方法(pull)在创建时,在创建报表的时候就出现了server="";database="";user id=""; password=""等各项要求写定,如此那不是还是不能解决移植性的问题
      

  5.   

    那如果用pull模式创建的报表在移植时怎么办呢?
      

  6.   

    应该是Push模式!用推模式设计的报表,更改数据源时只要表结构完全一致,是没问题的,我的一个项目里,把数据源从SQL Server改成Access,报表就基本没改
      

  7.   

    push 模式我知道可以实现,但如果用pull模式如何实现移植?