- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 CrystalReportViewer
和 CrystalReportSource
在我的应用程序中加载和显示 .rpt 文件。
我的情况是这样的:
假设某人在我的应用程序之外创建了一个 Crystal Reports 报表并将其数据源设置为数据库。然后我在我的应用程序中使用该 .rpt 文件,但我需要将它绑定(bind)到另一个数据库(在表结构和列名方面与原始数据库相同,但连接字符串以及用户名和密码不同)。
我如何在 VB.NET 代码中做到这一点?
目前我使用以下方式加载报告:
Public Function SetReportSource(ByVal RptFile As String) As ReportDocument
Try
Dim crtableLogoninfo As New TableLogOnInfo()
Dim crConnectionInfo As New ConnectionInfo()
Dim CrTables As Tables
Dim CrTable As Table
If System.IO.File.Exists(RptFile) Then
Dim crReportDocument As New ReportDocument()
crReportDocument.Load(RptFile)
With crConnectionInfo
.ServerName = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=localhost;Port=3306;UID=root;"
.DatabaseName = gDatabaseName
.UserID = gServerUser
.Password = gServerPassword
End With
CrTables = crReportDocument.Database.Tables
For Each CrTable In CrTables
CrTable.ApplyLogOnInfo(crtableLogoninfo)
CrTable.LogOnInfo.ConnectionInfo.ServerName = crConnectionInfo.ServerName
CrTable.LogOnInfo.ConnectionInfo.DatabaseName = crConnectionInfo.DatabaseName
CrTable.LogOnInfo.ConnectionInfo.UserID = crConnectionInfo.UserID
CrTable.LogOnInfo.ConnectionInfo.Password = crConnectionInfo.Password
'Apply the schema name to the table's location
CrTable.Location = gDatabaseName & "." & CrTable.Location
Next
crReportDocument.VerifyDatabase()
SetReportSource = crReportDocument
Else
MsgBox("Report file not found...", MsgBoxStyle.Critical, proTitleMsg)
End If
Catch ex As Exception
System.Windows.Forms.MessageBox.Show("Error Found..." & vbCrLf & "Error No : " & Err.Number & vbCrLf & "Description :" & Err.Description & vbCrLf & vbCrLf & "Line no : " & Err.Erl & vbCrLf & "Procedure name : SetReportSource" & vbCrLf & "Module name : GeneralFunctions", proTitleMsg)
End Try
End Function
最佳答案
我是这样做的。我在 ASP.NET 上将 Oracle 与 ODBC 结合使用,但您应该能够对 MySQL 和 ODBC 进行同样的操作:
作为我一直在进行的遗留应用程序升级的一部分,我决定将 Crystal Reports 移动到 Web 应用程序,而不是让用户通过 Citrix 直接在 Crystal Reports XI 上访问它们,这一直是他们一直采用的方法使用。这有几个优点,主要的一个是速度。困扰我的一个问题是如何在运行时更改登录信息,以便应用程序根据从哪个服务器访问报告自动指向正确的 Oracle 数据库(开发、测试或生产)。
我找到的解决方案是在 ODBC 中将 Oracle 数据库连接设置为 DSN,并连接到 ODBC DSN,而不是直接使用 Oracle 客户端。这不是唯一的方法,但它似乎是实现我的目的的最佳方法。
在包含 Crystal Reports 查看器的页面的代码隐藏文件中,我放置了以下代码来处理呈现查看器的同一事件。
Protected Sub btnGenerate_Click(sender As Object, e As System.EventArgs) Handles btnGenerate.Click
Dim connInfo As New ConnectionInfo
Dim rptDoc As New ReportDocument
' setup the connection
With connInfo
.ServerName = "oracledsn" ' ODBC DSN in quotes, not Oracle server or database name
.DatabaseName = "" ' leave empty string here
.UserID = "username" ' database user ID in quotes
.Password = "password" 'database password in quotes
End With
' load the Crystal Report
rptDoc.Load(Server.MapPath(Utilities.AppSettingsFunction.getValue("ReportFolder") & ddlReports.SelectedValue))
' add required parameters
If pnlstartdates.Visible Then
rptDoc.SetParameterValue("REPORT_DATE", txtSingleDate.Text)
End If
' apply logon information
For Each tbl As CrystalDecisions.CrystalReports.Engine.Table In rptDoc.Database.Tables
Dim repTblLogonInfo As TableLogOnInfo = tbl.LogOnInfo
repTblLogonInfo.ConnectionInfo = connInfo
tbl.ApplyLogOnInfo(repTblLogonInfo)
Next
' Set, bind, and display Crystal Reports Viewer data source
Session("rptDoc") = rptDoc
Me.CrystalReportViewer1.ReportSource = Session("rptDoc")
CrystalReportViewer1.DataBind()
UpdatePanel1.Update()
End Sub
上面的登录信息可以很容易地存储在 web.config 中,而不是像上面那样硬编码。
顺便说一句,我选择将我的 Crystal Reports 查看器放在 ASP.NET AJAX 更新面板中,这就是查看器的 ReportSource 存储在 session 变量中的原因。如果您选择这样做,查看器必须在 Init 事件(而不是 Load 事件)中进行数据绑定(bind)才能正确显示。
Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
If Not Page.IsPostBack Then
txtSingleDate.Text = Now.Date()
ElseIf Session("rptDoc") IsNot Nothing Then
Me.CrystalReportViewer1.ReportSource = Session("rptDoc")
CrystalReportViewer1.DataBind()
UpdatePanel1.Update()
End If
End Sub
关于mysql - 将 MySQL 连接字符串动态更改为 Crystal Reports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6212779/
来自 Ruby 世界的我立刻明白为什么 Crystal 选择不实现 for方法。但后来我惊讶地发现 Crystal 确实实现了 for宏的方法。我更惊讶地发现宏不允许可枚举( .each 等)语法(即
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
当我创建 Crystal 报表以及将字段和字段添加到数据库时,报表会为我创建的发票输出一个完全空白的报表。你如何调试 Crystal 报告? 您是否设置要输出的标记或标志?某处是否有错误日志描述报告的
我有一个 Crystal 报表功能,该功能要求我修剪以“-”开头的字符,并删除“-”(破折号)之后的其余字符。 例如,我的订单号为00000112345-C43-PJ。 我如何只剪掉“-”右边的所有内
如果我的某些库位于默认目录 lib 之外,我是否可以指出在没有 lib 目录和 shards.yml 的情况下成功编译的需要路径。 最佳答案 是的,更改 CRYSTAL_PATH 环境变量。默认是 $
如何将 Crystal Reports 8.0 迁移到 Crystal Reports 2008? 8.0的存储过程的 Crystal 报表在2008年不执行,有人可以帮忙吗? 我们正在使用 Seag
我们有几个执行相同格式操作的报告(例如,如果值在特定范围内,则显示“通过”或“失败”。) 如果没有 Crystal Reports Server,有没有办法在报表之间共享功能,以便它们不需要重复?我知
如何更改在 Crystal 服务器内运行的 Crystal 报表在运行时使用的数据源(数据库服务器、用户名、密码)? 我有一个 Crystal 服务器并上传了具有设置数据源的报告(SQL Server
我是 Crystal Report 的新手,我一直在想办法解决这个子报表分页问题。我想我知道报告的作用,但我不知道如何解决这个问题。 很难解释所以我上传了这些图片。 我的主要报告: 我的子报告,在 D
我使用的是 Crystal 报表设计器版本 11。 我有一个调用子报表的报表,并且我已经设置了链接参数。子报表正在使用存储过程。 我看不出如何将传递给子报表的参数输入到返回数据的存储过程中。 最佳答案
这是一个普遍的问题。在 Crystal 中, Exception 和 Error 之间有什么区别? 例如,在 JSON 包中,既有 JSON::Error 也有继承自 JSON::ParseExcep
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 2年前关闭。 Improve this questi
我们如何在 Crystal 报表中为分层组只设置一个字段的缩进? 最佳答案 在 Report 菜单中选择 Hierarchical Grouping Options,将 Group Indent 设置
我需要在Crystal Reports上创建数据透视表。现在我正在使用ODBC连接...但是虽然我知道您可以在CR中创建数据透视表,但我不确定100%如何做到这一点。这里有人知道一个简单的逐步方法吗?
我一直在通过构建它来运行我的 Crystal webapp,然后运行可执行文件。但是,它始终监听端口 3000。 如何构建/运行在 80 和 443 上监听的 Crystal webapps? 我也在
我有 Page Footer()PF A 和 B,每当我抑制 PFa 时,PFb 都会在报告页脚之后向上移动。 把垂直线想象成行号, |Page Header |Details |Report Foo
我想为 Crystal 报表的页眉和页脚行(只有我的数据表而不是完整部分)着色。为该部分着色很容易,但我找不到合适的方法 最佳答案 对于这 3 种方式,您可以实现。 如果页眉/页脚都在与数据不同的部分
我试图像我们在SQL中一样使用IN运算符来过滤 Crystal 报表。在 Crystal 报表中,我试图以这种方式进行操作 ({i_NonPfcIncDetStt.TeamCode} IN('ABC'
大家好,我是 Crystal Reports 的新手。我只想知道什么是 local 和 global 变量。请指出局部变量和全局变量之间的区别。 最佳答案 局部变量:顾名思义,它是创建的公式的局部变量
我是 Crystal 报告的新手,所以这对你来说可能是新手。 我创建了一个交叉表,右侧的行总计。如何添加额外的列来显示行的平均值。我正在使用 Crystal Reports 2008 这是交叉表的粗略
我是一名优秀的程序员,十分优秀!