Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在对话框中显示访问报告_C#_Ms Access_Interop - Fatal编程技术网

C# 在对话框中显示访问报告

C# 在对话框中显示访问报告,c#,ms-access,interop,C#,Ms Access,Interop,我想显示Access报告,但不显示Access中的主窗体。我想在对话框或类似的东西中显示它。我可以显示报告,但需要打开访问主窗口: _access.DoCmd.OpenReport( "myReport", //ReportName AcView.acViewReport, //View System.Reflection.Missing.Value, "

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

        _access.DoCmd.OpenReport(
            "myReport", //ReportName
            AcView.acViewReport, //View
            System.Reflection.Missing.Value,
            "my Where Condition"
        );
但这会一直打开访问权限。我只想在对话框中查看我的报告。即使我设置了
AcWindowMode.acDialog
属性,它也会在后面打开Access

我也知道我可以将其保存为PDF并打开此文件。但就我而言,这是不可能的


有没有一种方法可以在对话框中显示访问报告而不显示(或隐藏)其后面的访问主窗口?

您可以这样做:

首先,在access应用程序中,将接口设置为tabbed。并取消选中“显示”选项卡

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

这样说:

Sub RunMyReport(s As String)

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

End Sub
note the vb form that launched the form.

Note the Access report, 
it shows no ribbon or background interface.
现在,您的.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
结果如下所示:

Sub RunMyReport(s As String)

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

End Sub
note the vb form that launched the form.

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

请注意,我们可以将报告名称传递给给定的例程。 现在,您很可能可以移动以下项目的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助手函数,我们可以打开任何报表。隐藏功能区的命令起作用,其他设置(隐藏导航窗格和选项卡式界面将在access应用程序中设置)

所以上述方法应该有效。如果它只有几行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;
}

你可以考虑互操作程序集,因为这在英特尔意义上是有帮助的,但是上面写的没有引用Office或使用互操作程序集。

我不这么认为。因此,我必须搜索另一种解决方案。如果在Access中选择选项卡式UI,则只应显示报表和报表功能区。如果你愿意,你甚至可以隐藏丝带。只需将Access设置为使用选项卡式界面,并将选项设置为隐藏选项卡。此时,您只能看到report+ribbon。这必须是一个accDB才能工作,而不是mdb。谢谢你的回答。它看起来很干净,正是我想要的。