在对话框中显示访问报告

时间:2020-10-13 09:10:12

标签: c# ms-access interop

我想显示访问报告而不显示Access中的MainForm。我想在对话框或类似的东西中显示它。我可以显示报告,但可以打开Access主窗口:

        _access.DoCmd.OpenReport(
            "myReport", //ReportName
            AcView.acViewReport, //View
            System.Reflection.Missing.Value,
            "my Where Condition"
        );

但这将始终打开Access。我只想在对话框中查看我的报告。即使设置了AcWindowMode.acDialog属性,它也会在其后面打开Access。

我也知道我可以将其另存为PDF并打开它。但这对我来说是不可能的。

是否可以在对话框中显示访问报告而不显示(或隐藏)访问主窗口?

1 个答案:

答案 0 :(得分:1)

您可以这样操作:

首先,在访问应用程序中,将接口设置为选项卡式。并取消选中显示标签。

现在在Access的标准代码模块中编写代码存根。

这样说:

Sub RunMyReport(s As String)

  DoCmd.ShowToolbar "Ribbon", acToolbarNo
  
  ' now launch report
  
  DoCmd.OpenReport "qryHotels", acViewReport

End Sub

现在,您的.net代码将如下所示 (我什至不担心互操作性-它没有太大帮助)。 您有以下.net代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim objAccess As Object = CreateObject("Access.Application")

    objAccess.OpenCurrentDatabase("C:\test\test44.accdb")

    objAccess.Run("RunMyReport", "qryHotels")
    objAccess.Visible = True

End Sub

结果现在看起来像这样:

note the vb form that launched the form.

Note the Access report, 
it shows no ribbon or background interface.

enter image description here

请注意,我们必须将报告名称传递给给定的例程。 现在,您可以移动此代码的VBA代码:

 DoCmd.ShowToolbar "Ribbon", acToolbarNo
  
  ' now launch report
  DoCmd.OpenReport "qryHotels", acViewReport

在.net方面,甚至不必调用VBA例程。

    Dim objAccess As Object = CreateObject("Access.Application")

    objAccess.OpenCurrentDatabase("C:\test\test44.accdb")

    objAccess.DoCmd.ShowToolbar("Ribbon", 2)       ' acToolbarNo = 2
    objAccess.DoCmd.OpenReport("qryHotels", 5)     ' acViewReport = 5

    objAccess.Visible = True

因此,实际上,我们不需要VBA帮助程序功能,并且可以打开任何报告。隐藏功能区的命令有效,其他设置(在导航应用程序中将设置隐藏导航窗格和选项卡式界面)。

因此上面应该可以工作。仅给出几行vb.net代码,然后像c#一样,它应该很容易转换。例如,这应该可以工作:

{
var objAccess = Interaction.CreateObject("Access.Application");
objAccess.OpenCurrentDatabase(@"C:\test\test44.accdb");
objAccess.DoCmd.ShowToolbar("Ribbon", 2);       // acToolbarNo = 2
objAccess.DoCmd.OpenReport("qryHotels", 5);     // acViewReport = 5
objAccess.Visible = true;
}

您可以考虑使用互操作程序集,因为这可以帮助智能感知,但是上面编写的内容没有提及办公或互操作程序集的使用。

相关问题