首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MS :从db2上从db1启动一个函数,然后返回到db1,而无需等待db2上的代码完成

问MS :从db2上从db1启动一个函数,然后返回到db1,而无需等待db2上的代码完成
EN

Stack Overflow用户
提问于 2018-04-06 17:19:21
回答 2查看 65关注 0票数 0

我一整天都在寻找答案。我正在为一个客户开发一个现有的MS访问解决方案,分为FE/BE。BE中的数据需要与Azure SQL同步。我开发了一个没有问题处理这个部分的类。问题是,当同步作业被触发时,需要花费大量的时间,并且访问是一个单线程系统,用户不得不等待,而客户不喜欢它。

因此,我所做的是将Sync类移动到BE部分,因此它独立于FE运行,特别是数据首先在舞台表中导入,然后再消费,这样就不会对FE上的用户产生干扰。

问题是,当我试图从BE使用Access.Application和OpenCurrentDatabase的类中触发Sync函数时,也会发生同样的事情;我必须等到BE上的进程完成之后,才能使FE重新获得焦点。

我创建了一个Autoexec宏,在BE打开时运行"Sync“作业,然后尝试使用FE中的" shell”打开BE (两个独立的访问实例),但是BE是密码保护的(Access 2016),不能通过shell打开。

我现在想要的是一种在BE上启动同步作业并立即返回FE的方法。我找不到办法。有人能帮我吗?

提前谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-07 16:16:48

您可以使用我共享的here技术在Access中异步运行代码:使用表单计时器使命令异步执行。它要求在执行代码的数据库中显示一个表单。

在打开第二个数据库的数据库中:

代码语言:javascript
复制
Dim A As Access.Application 'Outside of sub
Public Sub RunTaskAsync()
    Set A = New Access.Application
    A.OpenCurrentDatabase "C:\Path\To\Database.accdb", , "password"
    A.DoCmd.OpenForm "ExecuteTask"
    A.Forms("ExecuteTask").TimerInterval = 1
End Sub

在数据库中的一个名为ExecuteTask的表单中打开:

代码语言:javascript
复制
Private Sub Form_Timer()
    DoCmd.RunMacro "TheMacro"
    Application.Quit
End Sub

您需要删除任何AutoExec宏,这些宏将同步执行。

票数 0
EN

Stack Overflow用户

发布于 2018-04-06 20:16:49

您需要让第一个实例启动第二个Access实例,该实例运行同步/助手应用程序--即使关闭了第一个实例。

壳牌可以用来做这个。

不要用后端来做这个。创建一个专用的助手应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49698047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档