【发布时间】:2011-11-23 20:38:03
【问题描述】:
我已经研究了好几天,我的 WCF 服务通过 com/interop 创建了一个 Access 对象。我已经为 Access 对象运行了OpenCurrentDatabase 调用,没有出现错误,但Application.CurrentDB 仍然是空/空。如果CurrentDB 什么都不是,那么我肯定不能打电话给Application.Run "myFunction" 我意识到WCF 服务并不意味着是用户交互的,但这是一个很长的故事,为什么我要走这条路。基本上我需要尽快而不是稍后准备好概念证明,并且替代(正确)路线涉及对大型复杂访问 VBA 应用程序的完全重写。这不是权限问题,我已将 IIS 用户名添加到安全选项卡中。我真正需要的是一种将Environment.UserInteractive 设置为true 的方法,这样我的WCF 服务就可以在我的服务器机器上创建一个Access 实例,运行VBA 函数,关闭,返回true。我将 VS 2010 用于 WCF,将 IIS 7 用于我的服务器,将 Access 2010 用于 VBA 应用程序。请帮忙!
【问题讨论】:
-
能否让数据库在启动时运行该功能?即,制作一个作为运行进程的启动表单的表单,或制作一个调用适当代码的 AutoExec 宏,这样您就不必从 .NET 执行任何其他操作。
-
是的,我在研究中遇到了这个问题,但我正在考虑将其作为最后的手段,因为整个 VBA 程序并不打算从头到尾一次运行。一个功能导出一个工作表供我们的承销商完成并发回给分析师。一旦返回,分析人员将启动导入功能。走这条路是可能的,但概念验证最终会是我们坐在一个房间里看着它工作 10 分钟,而老板不会看到任何事情发生。
-
我不确定 autoexec 宏是否允许参数,我想我可以将要运行的函数的名称写入 txt 文件或数据库,然后让 autoexec 宏检查文件运行哪个函数。什么马戏团!
-
我猜你应该期望尝试从 WCF 服务进行访问自动化 :-) 你最终可能会像我们对应用程序所做的那样 - 将 VBA 逻辑重写到 VB.Net 库中。
-
好的,这是我愚蠢的解决方案。 WCF 服务会将函数名和参数信息写入服务机器上的数据库。服务器机器上的桌面应用程序将监视数据库中的新条目。一旦发现 WCF 服务写入的新条目,它将执行 access DB 函数并将结果写回服务数据库。 WCF 服务将监视数据库的结果并在找到后将其发回。
标签: asp.net vb.net wcf ms-access vba