来自访问数据库的 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 预览报告的主要内容,如果未能解决你的问题,请参考以下文章

来自数据集的 Vb.Net 水晶报告

VB.NET 仅从一个字段访问填充组合框

访问报告打印输出(或 PDF)缺少打印预览中可见的信息

vb.net 中的打印预览为空

jqGrid 不显示来自 asmx Web 服务(vb.net)的数据

在 Visual Studio 2010 的 vb.net 中创建钻取 rdlc 报告