Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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# 更新基础SQL表时,如何在Access中触发VBA代码? 出身背景_C#_Sql Server_Ms Access_Triggers - Fatal编程技术网

C# 更新基础SQL表时,如何在Access中触发VBA代码? 出身背景

C# 更新基础SQL表时,如何在Access中触发VBA代码? 出身背景,c#,sql-server,ms-access,triggers,C#,Sql Server,Ms Access,Triggers,我们有一个遗留的MS Access应用程序,它使用MS SQL表作为后端,并根据用户操作按需打印报表产品标签。这与预期的一样,我们不希望更改此部分 我有一个新的独立的C Windows窗体应用程序,它运行在不同的PC上,执行一些基本不相关的操作,但要求用户在进程结束时打印上述标签 问题 在从独立C应用程序更新数据时,如何触发运行报告的Access VBA,而不是让用户切换到位于不同位置的不同PC上的传统Access应用程序 一个对手 我想我可以创建一个带有列LabelId、PrinterId的R

我们有一个遗留的MS Access应用程序,它使用MS SQL表作为后端,并根据用户操作按需打印报表产品标签。这与预期的一样,我们不希望更改此部分

我有一个新的独立的C Windows窗体应用程序,它运行在不同的PC上,执行一些基本不相关的操作,但要求用户在进程结束时打印上述标签

问题 在从独立C应用程序更新数据时,如何触发运行报告的Access VBA,而不是让用户切换到位于不同位置的不同PC上的传统Access应用程序

一个对手 我想我可以创建一个带有列LabelId、PrinterId的RequestedLabels表。独立应用程序将插入一行以请求标签,而MS Access应用程序将以较小的间隔查询该表,以查看是否有任何新标签要为此实例打印

但是,这种方法有几点我不喜欢:

标签应在请求后立即打印,因此我的查询间隔必须非常小,最多1-2秒。即使是2秒,延迟也会造成麻烦。在更高的速率下,我怀疑这可能会干扰MS Access应用程序的响应

这将在当时的10-20台机器上运行,因此对SQL server的查询数量大约为每秒20个或更多

用户只需每隔几分钟打印一次标签,因此这样做所需的大部分处理/网络容量都被浪费了

更好的方法 我希望通过某种方式使底层数据的更改在MS Access中触发一个表单事件,或者触发一些VBA函数,以便按需打印标签

警告 这些计算机跨越两个子网,由严格的防火墙隔开,在域内外运行混合操作系统。由于设置不统一,PC之间的RPC在过去被证明是很棘手的

我更喜欢依赖于更新SQL server上的数据的解决方案,或者C和MS Access应用程序都可以利用的其他一些MS SQL功能

更新:
由于有两次投票要结束,我对措辞进行了改进,以便更清楚地关注在基础数据更改时触发VBA。

您可以在MS Access中构建一个宏以将报告发送到打印机。报告中应该已经有了要打印的数据

假设宏的名称为mcrPrintReport

然后,您可以从命令行执行MS Access以打开Access DB文件并按如下方式运行宏:

路径ToAccessExe路径ToAccessFile/x宏名

C:\Program Files\Microsoft Office\Office16\MSACCESS.EXE C:\AccessDB.accdb/x mcrPrintReport

然后,您可以使用专用PC上的任务计划程序,将其计划为每隔5分钟运行一次


另请参阅此相关问题:

您可以使用COM让您的独立应用程序自动执行Access应用程序上的操作,例如,使用Application.Run触发一些VBA代码。对我来说,这似乎比轮询更改要好得多。@ErikA我们在PowerShell远程处理方面的结果好坏参半,因为操作系统、域与独立PC以及PC之间严格的防火墙混合在一起。此外,我还必须对触发器PC和打印机PC的每种组合进行测试。也就是说,我仍然想试试这个-你有没有任何示例代码可以告诉我?我不认为远程调用和EXE对我有效我已经更新了问题来解释为什么,但是如果有,我如何将所需的labelId和printerId传递给宏?我不能每隔5分钟进行一次民意调查,因为这太慢了,而且更快的会出现我已经提到过的同样类型的问题。