【问题标题】:How to have Access VBA overwrite a file on the desktop that is not the version on the server如何让 Access VBA 覆盖桌面上不是服务器版本的文件
【发布时间】:2016-12-25 14:35:31
【问题描述】:

我是 Microsoft Access 的新手,但上周我一直在学习。但现在我被困住了。我正在编写 VBA 代码,以检查用户是否使用桌面上的当前数据库版本与服务器上的数据库版本相比。我在后端建立了一个表格,其中包含每个用户版本的数值,然后是一个表格,该表格还存储了服务器上最新版本的数值(在进行更改时由管理员更改)。当前代码比较这些值以确定打开的副本是否是最新版本。如果不是,它会打开服务器上的版本,然后在后端表中更改用户的版本。但是我想更改桌面上的副本,以便下次用户打开副本时它是新版本,因为代码将识别该版本已“更新”。

我知道有 My.Computer.FileSystem.CopyFile() 可用于将一个文件复制到新位置并覆盖那里的文件,但如果我使用它,它将能够写入在打开并运行生成 .CopyFile() 命令的代码的文件上?我已经在 .CopyFile() 命令之前访问了服务器上的版本,但我只是不知道它是否会真正执行。我也不确定我是否喜欢服务器版本打开后用户需要重新输入其用户名和密码的事实。有谁知道在用户不知道的情况下覆盖桌面上的文件的方法?

【问题讨论】:

  • 为什么要隐藏有可用更新并将被安装的事实?让它成为一个可见的过程,告诉用户这将发生,关闭前端,安装新版本并重新打开它。

标签: ms-access vba file-copying


【解决方案1】:

我已经在以前的数据库中完成了这项工作,并进行了一些修改,我认为您可以使其适合您的需求。

我将从您检查版本并确定它是最新可用还是旧版本开始。

If Not updated Then
    Select Case MsgBox("An update is available for your client!!!" _
    + " You would be able to use this client version but without new features and support!" _
    + " Do you want to update now?", vbYesNo Or vbInformation Or vbDefaultButton1, "Available Update")
        Case vbYes
            'Call MsgBox("Please contact your administrator to receive your new client version!!!", vbExclamation Or vbDefaultButton1, "Available Update")
            Shell "cmd /c ""<whatever path you want>\doupdate.cmd"", vbHide" 'calls a cmd script to do the dirty job of copy -> see below
            Application.CloseCurrentDatabase 'closes the current database
            Exit Sub
        Case vbNo
            <whatever you want on no>
    End Select
End If

您可以删除上面代码中的选择,并且每次更新的变量为 False 时都会运行,而无需询问用户。

cmd脚本代码如下:

@Echo OFF

SLEEP 3 
copy "\\server\groups\<whatever path>\file.accde" "%userprofile%\Desktop\file.accde" /Y
call "%userprofile%\Desktop\file.accde"
exit

上面的脚本肯定不是完美的,因为开始时有 3 秒的忙等待,但我想确保访问有时间关闭。 (如果访问挂起关闭,问题就足够大了。

您还可以在数据库的关闭事件中添加上述内容或命令My.Computer.FileSystem.CopyFile(),但在这种情况下,更新将在用户完成旧版本的工作后进行。

请注意,在这种情况下,出于其他原因,我希望更新的脚本与数据库分开。即使您使用 vba 进行更新,主要原则也是相同的,您必须在覆盖之前关闭文件。

【讨论】:

  • 我会试试这个。即使它有一个数据库打开一秒钟然后自行关闭,我目前所拥有的仍然有效。第二个数据库充当教程并更新本地计算机上的副本。
  • 您所做的与上面的类似,不同之处在于上面是一个更“优雅的解决方案”。事实仍然是您无法覆盖正在使用的文件。除了上述之外,您还可以将用户名和密码作为参数传递,然后在重新打开数据库时自动连接。然后你就会拥有你想要的功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2014-08-29
  • 1970-01-01
  • 2012-03-25
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多