Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.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++ 来自MFC的Call access 2007报告_C++_Ms Access_Mfc_Report - Fatal编程技术网

C++ 来自MFC的Call access 2007报告

C++ 来自MFC的Call access 2007报告,c++,ms-access,mfc,report,C++,Ms Access,Mfc,Report,谁能解释一下如何从MFC应用程序调用访问报告(2007)? 我有一个带有按钮的表单,单击它时应该会显示报告 我试过这个 它像闪屏一样显示报告,然后消失 有什么建议吗?我帮助维护使用Access 2003/2007进行报告的MFC应用程序。这是一个我们正在尝试改变的系统——访问不是很灵活,我们在MFC中“托管”访问有点随意 我不是托管体系结构设计的第一方,也不是以某种方式实现的原因,但这里简要介绍了我们在应用程序中访问时遇到的两个困难: 只有完全访问安装才能注册Access.Application

谁能解释一下如何从MFC应用程序调用访问报告(2007)? 我有一个带有按钮的表单,单击它时应该会显示报告

我试过这个 它像闪屏一样显示报告,然后消失


有什么建议吗?

我帮助维护使用Access 2003/2007进行报告的MFC应用程序。这是一个我们正在尝试改变的系统——访问不是很灵活,我们在MFC中“托管”访问有点随意

我不是托管体系结构设计的第一方,也不是以某种方式实现的原因,但这里简要介绍了我们在应用程序中访问时遇到的两个困难:

只有完全访问安装才能注册
Access.Application
OLE自动化接口
。如果您可以保证您的用户将完全安装Access,那么这将不适用于您(
CLSIDFromProgID
后跟
CoCreateInstance
将为您提供一个自动化界面),但是,如果您必须为Access运行时获取一个
Access.Application
对象,那么还需要做一些额外的工作。您需要启动
msaccess.exe
和。有一个示例显示了两种连接方式,尽管是在VBA中

Access不是为嵌入另一个应用程序而设计的。对于访问报告,没有等效项。您可以在CodeProject示例中看到这一点—它将报告呈现到中间
.html
文件,然后使用嵌入式web浏览器控件显示报告

我们的应用程序在这里做了错误的事情(TM),并摆弄了Access应用程序的窗口样式、父级和位置,使其看起来像是在我们的应用程序中有一个报告,但这只是一个视觉上的花招。然而,在这种情况下,它给我们留下了一些不受欢迎的行为

  • 我们使用自定义的Office功能区,由于Access 2007的功能区是窗口框架的一部分,用户可以将Access“拖出”我们的应用程序

  • 当一个进程终止时,它会放弃它拥有的任何“前景焦点”。当
    msaccess.exe
    因为用户关闭了一个报告而关闭时,我们的应用程序以z顺序结束在窗口底部(由于我们为访问窗口设置了父窗口的方式)

  • 我认为您应该查看实际的报告库,并将它们与将Access集成到应用程序中所需的工作进行比较

    • 是一个轻量级但功能强大的报告库。它使用.NET,但您可以使用代理应用程序托管控件。从上面可以看出,在不同进程中设置父/子窗口是有效的。如果您可以将应用程序升级到C++/CLI,那么使用它就更容易了

    • 也是免费的,但它不像报表查看器那样轻量级

    如果您必须使用Access,我个人会避开使用自动化接口,使用带有开关的宏来描述我想要呈现的报表以及呈现到哪里
    AutoExec
    将启动,呈现报告并关闭访问(这里有一个技术示例)。一旦创建了输出文件,就可以将其嵌入到应用程序中。有几点建议:

  • 如果您的报告很简单,请使用CodeProject文章中的
    .html
    和web浏览器示例

  • 如果您的报告具有复杂的格式,您可以将报告输出为
    .snp
    (快照)文件,然后将其显示在应用程序中(可嵌入-程序ID为
    snpvw.Snapshot Viewer Control.1


  • 我帮助维护使用Access 2003/2007进行报告的MFC应用程序。这是一个我们正在尝试改变的系统——访问不是很灵活,我们在MFC中“托管”访问有点随意

    我不是托管体系结构设计的第一方,也不是以某种方式实现的原因,但这里简要介绍了我们在应用程序中访问时遇到的两个困难:

    只有完全访问安装才能注册
    Access.Application
    OLE自动化接口
    。如果您可以保证您的用户将完全安装Access,那么这将不适用于您(
    CLSIDFromProgID
    后跟
    CoCreateInstance
    将为您提供一个自动化界面),但是,如果您必须为Access运行时获取一个
    Access.Application
    对象,那么还需要做一些额外的工作。您需要启动
    msaccess.exe
    和。有一个示例显示了两种连接方式,尽管是在VBA中

    Access不是为嵌入另一个应用程序而设计的。对于访问报告,没有等效项。您可以在CodeProject示例中看到这一点—它将报告呈现到中间
    .html
    文件,然后使用嵌入式web浏览器控件显示报告

    我们的应用程序在这里做了错误的事情(TM),并摆弄了Access应用程序的窗口样式、父级和位置,使其看起来像是在我们的应用程序中有一个报告,但这只是一个视觉上的花招。然而,在这种情况下,它给我们留下了一些不受欢迎的行为

  • 我们使用自定义的Office功能区,由于Access 2007的功能区是窗口框架的一部分,用户可以将Access“拖出”我们的应用程序

  • 当一个进程终止时,它会放弃它拥有的任何“前景焦点”。当
    msaccess.exe
    因为用户关闭了一个报告而关闭时,我们的应用程序以z顺序结束在窗口底部(由于我们为访问窗口设置了父窗口的方式)

  • 我认为您应该查看实际的报告库,并将它们与将Access集成到应用程序中所需的工作进行比较

    • 是一个轻量级但功能强大的报告库。它使用.NET,但您可以使用代理应用程序托管控件