在运行时设置Crystal Report数据源

时间:2009-02-26 15:45:43

标签: database vb6 crystal-reports

创建Crystal Report时,我显然建立了一个用于开发的数据库和服务器连接。

我现在想在VB应用程序中做的是动态设置数据库和服务器名称以用于报告。我将这些值作为字符串varServer和varDatabase。

任何人都知道如何做到这一点?

提前致谢。

P.S我尝试了几种在线解决方案,但是我遇到了VB6问题。

4 个答案:

答案 0 :(得分:4)

This link包含您想知道的所有信息。

更新:以下是使用SQL Server进行集成身份验证的最低工作示例。您应该使用表对象的ConnectionProperties来设置连接参数。

Dim app As New CRAXDDRT.Application
Dim rpt As CRAXDDRT.Report
Dim tbl As CRAXDDRT.DatabaseTable
Dim tbls As CRAXDDRT.DatabaseTables

Set rpt = app.OpenReport("C:\report\repotest.rpt")

For Each tbl In rpt.Database.Tables
    tbl.ConnectionProperties.DeleteAll
    tbl.ConnectionProperties.Add "Provider", "SQLOLEDB"
    tbl.ConnectionProperties.Add "Data Source", "localhost"
    tbl.ConnectionProperties.Add "Initial Catalog", "testdb"
    tbl.ConnectionProperties.Add "Integrated Security", "True"   ' cut for sql authentication
    'tbl.ConnectionProperties.Add "User Id", "myuser"   ' add for sql authentication
    'tbl.ConnectionProperties.Add "Password", "mypass"  ' add for sql authentication
Next tbl

'This removes the schema from the Database Table's Location property.
Set tbls = rpt.Database.Tables
For Each tbl In tbls
    With tbl
        .Location = .Name
    End With
Next

'View the report
Viewer.ReportSource = rpt
Viewer.ViewReport

答案 1 :(得分:1)

很棒的工作!谢谢你的代码!我改变了一点,因为这部分不起作用:

'View the report
Viewer.ReportSource = rpt
Viewer.ViewReport

它有一个无法找到对象的错误

所以我这样做了:

With Me.CRViewer91
    .ReportSource = rpt
    .ViewReport
End With

答案 2 :(得分:0)

您使用的是什么版本的水晶?

在.net世界中,我通常会将数据集传递给报告,因为emoreau说here

这样,您的连接是从代码而不是晶体设置的,可以存储在全局连接属性中。但是,那是.net。我认为你所拥有的水晶版本应该具有相似的功能,或者Emoreau可能有一个如何在你正在使用的版本中用VB6做的例子。

希望得到你的开始。

答案 3 :(得分:0)

还可以通过添加此代码位来设置报告的默认提供程序。

 Dim MyProvider As Object = logOnInfo.ConnectionInfo.LogonProperties.LookupNameValuePair("Provider")
            If IsNothing(MyProvider) = False Then
                MyProvider.Value = "SQLOLEDB"
            End If