我可以强制我的Excel工作簿closures访问数据库连接?

我有一个用Java编写的简单服务器,为我的客户端应用程序提供来自访问数据库(.accdb)的数据,

数据来自数据库中的查询,它将来自链接的Excel工作簿(.xlsx)中多个工作表的数据组合在一起

这是不行的,因为excel工作簿需要由所有者定期更新,并且数据库需要恒定的正常运行时间,excel会在数据库打开时locking文件。

所以为了避免这个问题,我改变了数据库以运行工作簿副本。 我写了一个杀死java服务器的批处理脚本,因此closures了与数据库的连接并解锁复制的excel工作簿。 然后,它会将原始内容复制到复制的文件位置,然后重新启动服务器,从而更新数据库中的数据。 我设置Windows任务计划程序每天运行此batch file。

马虎的解决scheme,但它的工作。 或者我想。 batch file只运行一次,从那以后一直没有运行。

所以,在我再次向这里扔另外一张纸之前,我想我会在这里问。 有一种方法来设置原始Excel工作簿closures所有连接时,特定用户需要访问该文件? 如果我能做到这一点,我所要做的就是让我的服务器尝试在断开连接后重新连接,这应该不难。

我一直在想这个问题,并得到一个更好的解决scheme,但在我的机器上,我没有像你所描述的任何问题。 服务器和客户端在不同的机器上吗? 当我更新工作簿中的某些内容时,Access会自动看到它,尽pipe它们都在同一台机器上打开。 Access可能实际上并没有对数据做任何事情。

无论哪种方式,你可能想要考虑仍然使用像你一样的副本,并添加此ThisWorkbook对象下的macros:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) ' code to overwrite the databasecopy here ' use the Shell() procedure to run system commands to shutdown the database connections ' as you need End Sub 

这样,您仍然可能需要closures服务器,但至less您可以立即执行此操作,并且只能在更新工作簿时执行。

此外,我已经环顾四周你所问的实际问题,并没有发现任何确切的事情。 你也许可以尝试这样的事情:

 Set ActiveWorkbook.Connections() = Nothing 

如果你能弄清楚连接的索引。 或者也许遍历所有这些,然后开始备份。 现在再也没有时间去尝试弄清楚这个解决scheme是否可行。 希望它能帮助你。