【问题标题】:"Cannot open SQL server" error -- but using Access?“无法打开 SQL 服务器”错误——但使用 Access?
【发布时间】:2020-08-02 03:43:14
【问题描述】:

我想在 VB 6.0 中单击窗体上的按钮时打开 CR。这是我使用的代码:

 CrystalReport1.ReportFileName = "D:\VISUAL BASIC\monrep.rpt"
 CrystalReport1.RetrieveDataFiles
 CrystalReport1.Action = 1

但是当我尝试执行时,我遇到了“无法打开 SQL 服务器”错误。但我使用 Access 作为数据库文件。我只想打开 CR 显示特定表的内容。我正在使用 CR 8.5。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: ms-access vb6 crystal-reports-8.5


    【解决方案1】:

    这可能对你有帮助

    Public Sub OpenReport(ReportPath As String, DataPath As String)
        ' 1) add a reference to the Crystal Reports 8.5 ActiveX Designer Run Time Library
        ' 2) place a CrystalActiveXReportViewer control named crView to your form
        
        Dim oCRapp As CRAXDRT.Application
        Dim oReport As CRAXDRT.Report
        
        Set oCRapp = New CRAXDRT.Application
        Set oReport = oCRapp.OpenReport(ReportPath, crOpenReportByTempCopy)
        SetReportDatabase oReport, DataPath
        crView.ReportSource = oReport
        crView.ViewReport
    End Sub
    
    Public Sub SetReportDatabase(CrystalRpt As CRAXDRT.Report, DataPath As String)
    
        Dim oTab As CRAXDRT.DatabaseTable
    
        On Error GoTo errhndl
    
        For Each oTab In CrystalRpt.Database.Tables
            ' check connection type
            If LCase$(oTab.DllName) = "crdb_odbc.dll" Then
                With oTab.ConnectionProperties
                    .DeleteAll
                    .Add "Connection String", "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & DataPath & ";Uid=Admin;Pwd=MyPassword"
                End With
            End If
        Next oTab
    
        ' subreports
    
        Dim rptObj    As Object, rptObjs As CRAXDRT.ReportObjects, rptSecs As CRAXDRT.Sections, rptSec As CRAXDRT.Section
        Dim subRptObj As CRAXDRT.SubreportObject, oSubTab As CRAXDRT.DatabaseTable
        Dim subRpt    As CRAXDRT.Report
    
        Set rptSecs = CrystalRpt.Sections
    
        For Each rptSec In rptSecs
            Set rptObjs = rptSec.ReportObjects
    
            For Each rptObj In rptObjs
                If rptObj.Kind = crSubreportObject Then
                    Set subRptObj = rptObj
                    Set subRpt = subRptObj.OpenSubreport
    
                    For Each oSubTab In subRpt.Database.Tables
                        If oSubTab.DllName = "crdb_odbc.dll" Then
                    
                            With oSubTab.ConnectionProperties
                                .DeleteAll
                                .Add "Connection String", "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & DataPath & ";Uid=Admin;Pwd=MyPassword"
                            End With
                        
                        End If
                    Next oSubTab
                End If
            Next rptObj
        Next rptSec
    
        Exit Sub
    
    errhndl:
    
        Err.Raise Err.Number, "SetReportDatabase", Err.Description
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2015-12-04
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多