crystal reports 8-在vb6中动态设置位置

crystal reports 8-在vb6中动态设置位置,vb6,crystal-reports,Vb6,Crystal Reports,我有一个VB6前端,SQL Server 2005作为后端,Crystal Reports 8.5用于报告 我需要在运行时在我的应用程序中设置位置,因为我有2个数据库。我的问题是,当我更改数据库时,位置保持不变。如果有人能帮我,那就太好了。提前感谢您的时间,这是我的代码 Private Sub prin_Click() With CrystalReport1 .Connect = MDI1.txtcn --> this is my connection info "driver={

我有一个VB6前端,SQL Server 2005作为后端,Crystal Reports 8.5用于报告

我需要在运行时在我的应用程序中设置位置,因为我有2个数据库。我的问题是,当我更改数据库时,位置保持不变。如果有人能帮我,那就太好了。提前感谢您的时间,这是我的代码

Private Sub prin_Click()
With CrystalReport1
    .Connect = MDI1.txtcn --> this is my connection info "driver={sql server};server=server;database=database;uid=user;pwd=password"        
    .DiscardSavedData = True
    .Action = 1
    .PrintReport
End With

尝试按如下方式格式化连接字符串:

Private Sub cmdSetLocations_Click()
    Dim CrxApp As New CRAXDRT.Application
    Dim CrxRep As CRAXDRT.Report
    Dim CrxSubRep As CRAXDRT.Report

    Dim strReport As String
    Dim i As Integer, ii As Integer

    strReport = "[Path to report file]"
    Set CrxRep = CrxApp.OpenReport(strReport)

    SetReportLocation CrxRep

    For i = 1 To CrxRep.Sections.Count
        For ii = 1 To CrxRep.Sections(i).ReportObjects.Count
            If CrxRep.Sections(i).ReportObjects(ii).Kind = crSubreportObject Then
                Set CrxSubRep = CrxRep.OpenSubreport(CrxRep.Sections(i).ReportObjects(ii).SubreportName)
                SetReportLocation CrxSubRep
            End If
        Next ii
    Next

    'open your report in the report viewer

    Set CrxApp = Nothing
    Set CrxRep = Nothing
    Set CrxSubRep = Nothing
End Sub

Private Sub SetReportLocation(ByRef RepObj As CRAXDRT.Report)
    Dim CrxDDF As CRAXDRT.DatabaseTable
    Dim CP As CRAXDRT.ConnectionProperties

    For Each CrxDDF In RepObj.Database.Tables
        Set CP = CrxDDF.ConnectionProperties
        CP.DeleteAll
        CP.Add "Connection String", "[Your connection string goes here]"
    Next

    Set CrxDDF = Nothing
    Set CP = Nothing

End Sub
DSN=server;UID=数据库;PWD=密码;DSQ=用户

DSN
UID
DSQ
的含义是违反直觉的,它们被Crystal重载


还要检查是否没有子报表的
Connect
属性需要进行类似更改。

尝试以下代码:

Private Sub cmdSetLocations_Click()
    Dim CrxApp As New CRAXDRT.Application
    Dim CrxRep As CRAXDRT.Report
    Dim CrxSubRep As CRAXDRT.Report

    Dim strReport As String
    Dim i As Integer, ii As Integer

    strReport = "[Path to report file]"
    Set CrxRep = CrxApp.OpenReport(strReport)

    SetReportLocation CrxRep

    For i = 1 To CrxRep.Sections.Count
        For ii = 1 To CrxRep.Sections(i).ReportObjects.Count
            If CrxRep.Sections(i).ReportObjects(ii).Kind = crSubreportObject Then
                Set CrxSubRep = CrxRep.OpenSubreport(CrxRep.Sections(i).ReportObjects(ii).SubreportName)
                SetReportLocation CrxSubRep
            End If
        Next ii
    Next

    'open your report in the report viewer

    Set CrxApp = Nothing
    Set CrxRep = Nothing
    Set CrxSubRep = Nothing
End Sub

Private Sub SetReportLocation(ByRef RepObj As CRAXDRT.Report)
    Dim CrxDDF As CRAXDRT.DatabaseTable
    Dim CP As CRAXDRT.ConnectionProperties

    For Each CrxDDF In RepObj.Database.Tables
        Set CP = CrxDDF.ConnectionProperties
        CP.DeleteAll
        CP.Add "Connection String", "[Your connection string goes here]"
    Next

    Set CrxDDF = Nothing
    Set CP = Nothing

End Sub
带CR
.ReportFileName=App.Path+“\Labsen2.rpt”

.SelectionFormula=“{PersonalCalendar.PersonalCalendarDate}>=Date(&Year(DTPicker1)&“,”&Month(DTPicker1)&“,”&Day(DTPicker1)&“&”)和{PersonalCalendar.PersonalCalendarDate}为什么不将记录集传递到您的报告?这样,您就可以从任何支持的(我的意思是VB6可以连接到)获取数据数据库动态,您甚至可以合并来自多个数据库的数据,您的报表将需要数据(记录集)只有和报告将使用数据字段定义创建。

您好,谢谢您的回复。我按照您的说法进行了设置,但现在收到消息:运行时错误“20599”无法打开sql server。我的连接字符串如下所示:crystalreport1.Connect=“DSN=datapro1;UID=sal_mil;PWD=ss;DSQ=sa“其中datapro1是我的服务器名,sal_mil是我的数据库。知道吗?再次感谢您的时间和回复。常见的问题是服务器名和数据库名保存在crystal report中。我所做的是在VB6代码中创建Crystalreport对象,并将连接字符串设置为正确的服务器和数据库,然后将reportsource设置为与现有crystal SQL匹配的查询,但不指定数据库名称。。。从MyTable中选择*而不是从MyDatabase.dbo.MyTable中选择*。我开始使用MS Access进行开发,所以当我使用Crystal时,这是一个很大的变化。如果您可以升级,Crystal 10会更好。您好,谢谢您的回复。我的问题是如何在vb6中运行时更改Crystal report中的数据库位置。如果您有一个示例代码,为了清晰起见,最好是+1。欢迎来到SO。就我个人所知,您使用的是什么CR库?CRAXDDRT.dll?CRAXDRT.dll?嗨,Bobby,我不太确定,因为我对crystal report有些陌生。我刚刚从vb6中的组件插入了crystal report控件。在哪里可以找到这些dll。谢谢您的时间。