我一整天都在寻找答案。我正在为一个客户开发一个现有的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的方法。我找不到办法。有人能帮我吗?
提前谢谢!
发布于 2018-04-07 16:16:48
您可以使用我共享的here技术在Access中异步运行代码:使用表单计时器使命令异步执行。它要求在执行代码的数据库中显示一个表单。
在打开第二个数据库的数据库中:
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的表单中打开:
Private Sub Form_Timer()
DoCmd.RunMacro "TheMacro"
Application.Quit
End Sub您需要删除任何AutoExec宏,这些宏将同步执行。
发布于 2018-04-06 20:16:49
您需要让第一个实例启动第二个Access实例,该实例运行同步/助手应用程序--即使关闭了第一个实例。
壳牌可以用来做这个。
不要用后端来做这个。创建一个专用的助手应用程序。
https://stackoverflow.com/questions/49698047
复制相似问题