Настройка источника данных Crystal Report во время выполнения
При создании своего Crystal Report я, очевидно, установил соединение с базой данных и сервером, которые использую для разработки.
Что я хочу сделать сейчас в моем приложении VB, так это динамически установить базу данных и имя сервера для использования с отчетами. У меня есть эти значения в виде строк varServer и varDatabase.
Кто-нибудь знает, как это сделать?
Заранее спасибо.
PS Я пробовал несколько онлайн-решений, но у меня проблемы с VB6.
Ответов (4)4
По этой ссылке есть вся информация, которую вы хотите знать.
ОБНОВЛЕНИЕ: вот минимальный рабочий образец для интегрированной аутентификации с 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
Какую версию кристалла вы используете?
В мире .net я обычно передаю набор данных в отчет, как говорит здесь emoreau .
Таким образом, ваше соединение устанавливается из кода, а не кристалла, и может быть сохранено в глобальном свойстве соединения. Однако это .net. Я думаю, что либо версия кристалла, которая у вас есть, должна иметь аналогичную функциональность, либо у Emoreau может быть пример того, как это сделать в VB6 в версии, которую вы используете.
Надеюсь, вы начали.