创建Crystal Report时,我显然建立了一个用于开发的数据库和服务器连接。
我现在想在VB应用程序中做的是动态设置数据库和服务器名称以用于报告。我将这些值作为字符串varServer和varDatabase。
任何人都知道如何做到这一点?
提前致谢。
P.S我尝试了几种在线解决方案,但是我遇到了VB6问题。
答案 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