来自访问数据库的 Vb.Net 预览报告
Posted
技术标签:
【中文标题】来自访问数据库的 Vb.Net 预览报告【英文标题】:Vb.Net preview report from access database 【发布时间】:2014-01-13 07:55:12 【问题描述】:我正在使用 Visual Studio 2010 开发我的桌面应用程序和 ms access 数据库。我已经在 access 数据库中设计了报告,它们运行良好。现在我担心的是是否可以在我的 Vb.Net 应用程序中使用这些访问报告?
我需要这个,因为它会更容易分发软件,而不是使用水晶报告,我需要为水晶报告安装运行时机器。
【问题讨论】:
如果您不再使用 Access,那么不会。您当然可以从 .net 启动访问副本,然后从 .net 执行命令以启动 + 加载报告。但是,您不能再获取 FoxPro 报告并将它们与 sql 报告服务一起使用,然后您可以将 Access 报告获取到 sql server 报告服务。 .net 中内置的报表无法移动到 Access。因此,在过去 30 多年的软件行业中,这种方法的工作原理大致相同。但是,如果您可以并且将安装访问副本,那么您当然可以从 .net 启动 Access 并启动报告。 【参考方案1】:这是可能的,但这是一个可怕的实现。您基本上必须启动 Access,在 Access 中打开数据库文件,然后向下导航并启动报告。无法仅在应用程序中“查看”报告。它只会在 Access 中显示。
如果您不想使用 Crystal Reports,我认为最好的选择是使用 ReportViewer 控件。
【讨论】:
现在可以了。我所需要的只是执行此操作的代码,然后看看它是否需要。 我曾尝试使用 microsoft 报表查看器,但我不太了解如何使用它设计报表,因为它非常复杂。 在这里您可以找到有关如何设计报告的完整指南。 msdn.microsoft.com/en-us/library/bb522712.aspx 我设法显示了一份报告,但这并不是我所需要的。它有点不清楚。我会花更多的时间,看看我能降落在哪里。谢谢【参考方案2】:我发现了这个:https://support.microsoft.com/kb/317113?wa=wsignin1.0
要预览或打印 Access 报告,请调用 DoCmd 对象的 OpenReport 方法。当您调用 OpenReport 时,您传递的参数之一决定了报表是在屏幕上预览,还是发送到打印机:
' Preview a report named Sales:
oAccess.DoCmd.OpenReport(ReportName:="Sales", View:=Access.AcView.acViewPreview)
' Print a report named Sales:
oAccess.DoCmd.OpenReport(ReportName:="Sales", View:=Access.AcView.acViewNormal)
但我找不到太多关于 OpenReport 方法或 DoCmd 对象的信息/帮助。
【讨论】:
【参考方案3】:我不是专业的开发人员,但经过长时间的研究,它适用于我的项目。
我想直接从 MS Access 打开我现有的报告,然后从非默认安装文件夹路径(每台电脑不同)打开这些。第三个要求是打开多个报告(不是一起打开)。
设计: Form8.vb [Design]
vb.Net 代码:
Imports System.ComponentModel
Imports Microsoft.Office.Interop.Access
Public Class Form8
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim oAccess As New Microsoft.Office.Interop.Access.Application()
Dim CurDir As String = System.AppDomain.CurrentDomain.BaseDirectory
Dim FPath As String = CurDir & "\YourDatabase.accdb"
oAccess.Visible = True
oAccess.OpenCurrentDatabase(FPath)
If ComboBox1.Text = "Your text" Then
oAccess.DoCmd.OpenReport(ReportName:="Your Report Name", View:=AcView.acViewPreview)
ElseIf ComboBox1.Text = "Your text2" Then
oAccess.DoCmd.OpenReport(ReportName:="Your Report Name", View:=AcView.acViewPreview)
ElseIf ComboBox1.Text = "Your text3" Then
oAccess.DoCmd.OpenReport(ReportName:="Your Report Name", View:=AcView.acViewPreview)
End If
End Sub
End Class
将 YourDatabase 替换为 YourDatabaseName,将 Your text,Your text1,Your text2,Your text3 替换为 YourText,将 Your Report Name 替换为您的报告名称,根据需要。
最后,为了让这个解决方案发挥作用,您需要:
1) 您的 (Conn.open) 连接如下所示:
Dim dbsource As String = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = |DataDirectory|\Your DB.accdb"
2) 在解决方案资源管理器中,您的数据库将包含在您的项目或安装项目中,将与您的项目一起安装。像这样:
Solution Explorer [image]
SetUp Project link
3) 在服务器资源管理器中,数据连接(源)数据库文件名,必须使用完整路径名,例如:
C:\Users\User\Desktop\YourDatabase.accdb,属性中的连接字符串如下:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source = "C:\Users\User\Desktop\YourDatabase.accdb"。
希望对你有帮助!!!
【讨论】:
【参考方案4】:以下代码:
Preview a report named Sales:
oAccess.DoCmd.OpenReport(ReportName:="Sales", View:=Access.AcView.acViewPreview)
Print a report named Sales:
oAccess.DoCmd.OpenReport(ReportName:="Sales", View:=Access.AcView.acViewNormal)
但我找不到太多关于 OpenReport 方法或 DoCmd 对象的信息/帮助。
这仅在您使用 VB.Net 自动化 Access 应用程序时才有效。这将打开 Access 应用程序并允许您查看或打印报告,就像您直接运行 Access 一样。但是,您需要在运行 VB.Net 应用程序的计算机上安装 Access 应用程序(不仅仅是 .mdb 或 .accdb 文件)。
如果没有在运行 VB.Net 应用程序的计算机上使用 Access,我还没有找到任何方法来利用 Access 报告。我正在考虑将 Crystal Reports 用于我现在正在开发的应用程序。
【讨论】:
以上是关于来自访问数据库的 Vb.Net 预览报告的主要内容,如果未能解决你的问题,请参考以下文章