vs2005制作水晶报表弹出数据库登陆界面问题+动态登陆代码

来源:互联网 发布:修改电话号码软件 编辑:程序博客网 时间:2024/06/05 18:19

 之前在做水晶报表的时候都是在本机上测试的,都是正常的。

可是在另一台电脑上运行却总是出现弹出数据库连接登陆界面,用尽所有方法都没办法通过,

最后怀疑是不是盗版的问题…… GOOGLE了很久,看了很多博客,但是就是没有相关的解决办法。

无奈逛了水晶报表官方网站,凭借着看100个单词认得出1个单词的能力,只好下他的教程看源代码了。

最后终于发现啦!!!

引用了错误的程序集模块,天啊……

就下面这两句

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

 

出错时是

imports CrystalDecisions.Enterprise

Imports CrystalDecisions.Shared

 

真的不知道应该窃喜还是哭

最后终于测试了不下20次之后得出结论。

弹出那个该死的登陆界面对话框,一般出错是引用的程序集不对,还有看看自己给的登陆的信息(服务器名,数据库名,用户名,密码)是否正确,还有就是测试SQL是否连接正常。最后就是代码老是敲吧,那几句还是整成一个控件比较好。

下面是两种动态连接数据库的方法:(MSDN 上的 和 水晶报表官方教程里的)

最好老实按照这两种方法一行不漏的写,因为水晶报表的版本太多,支持什么样的编程模式都不太清楚,而这种连接是最基本的。(建议使用第二种,是水晶官方的方法,第一中还是偶尔弹出对话框)

‘*-------------------------------------------------------------------

 Private Sub ConfigureCrystalReports()
        Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
        myConnectionInfo.DatabaseName = "Report"

        myConnectionInfo.UserID = "sa"

        myConnectionInfo.Password = "123"
        myConnectionInfo.ServerName = "Server"
        Dim reportPath As String = Application.StartupPath & "/" & "Report1.rpt"
        Dim rpt As New ReportDocument
        rpt.Load(reportPath)
        Me.CrystalReportViewer1.ReportSource = rpt
        SetDBLogonForReport(myConnectionInfo)
    End Sub

    Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo)
        Dim myTableLogOnInfos As TableLogOnInfos = Me.CrystalReportViewer1.LogOnInfo
        For Each myTableLogOnInfo As TableLogOnInfo In myTableLogOnInfos
            myTableLogOnInfo.ConnectionInfo = myConnectionInfo
        Next
    End Sub

’---------------------------------------------------------------------------------------------

 Private Sub ConfigureCrystalReports2()
        Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
        myConnectionInfo.DatabaseName = "Report"

        myConnectionInfo.UserID = "sa"

        myConnectionInfo.Password = "123"
        myConnectionInfo.ServerName = "Server"
        Dim reportPath As String = Application.StartupPath & "/" & "Report1.rpt"
        Dim rpt As ReportDocument = New ReportDocument
        rpt.Load(reportPath) ', OpenReportMethod.OpenReportByDefault)

        SetDBLogonForReport2(myConnectionInfo, rpt)
        CrystalReportViewer1.ReportSource = rpt
    End Sub

    Private Sub SetDBLogonForReport2(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)
        Dim myTables As Tables = myReportDocument.Database.Tables
        Dim myTable As CrystalDecisions.CrystalReports.Engine.Table
        For Each myTable In myTables
            Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
            myTableLogonInfo.ConnectionInfo = myConnectionInfo
            myTable.ApplyLogOnInfo(myTableLogonInfo)
        Next
    End Sub

 

 

原创粉丝点击