我在尝试从表单上的按钮运行一些 vba 脚本时遇到了一些麻烦。
通过链接的 MDB 文件,我编写了一系列 Make Table 查询,以帮助某些其他查询工作。我没有让用户一个接一个地重新运行每个单独的 Make Table 查询,而是将查询放在 VBA 脚本中(使用DoCmd.RunSQL),然后将该脚本分配给表单上的按钮。
我正在使用的数据源还有一个文件信息表,其中包含数据的文件名和文件日期。
当用户单击按钮时,我希望他们知道运行 Make Tables 查询字符串时使用的数据源;这样他们就知道脚本在哪些数据上运行。
我的方法是使用 File Info 表创建最终的 Make Table 查询,将文件名和文件日期放在它自己的表中。
然后我会将这些字段添加到表单中,并将DoCmd.RunSQL用于这个最终的 Make Table 查询添加到按钮的 VBA 脚本的底部;一旦所有的 Make Tables 都运行了,文件信息和文件日期字段将在表单上显示/更新,告诉用户上次运行脚本时使用了哪些数据文件。
这是此代码(为简洁起见,我将在 FileInfo 之前运行的所有 Make Table 脚本总结为一些虚假的“AllOtherMakeTables”字符串)
Private Sub Command0_Click()
On Error GoTo Err_Command0_Click
DoCmd.SetWarnings False
Dim AllOtherMakeTables As String
Dim FileInfoStamp As String
AllOtherMakeTables = " SELECT SomeField INTO AnotherTable" _
& " FROM SomeTable" _
FileInfoStamp = " SELECT FileInfo.FileName, FileInfo.FileDate INTO FileInfoStamp" _
& " FROM FileInfo;" _
DoCmd.RunSQL AllOtherMakeTables
DoCmd.RunSQL FileInfoStamp
DoCmd.SetWarnings True
Exit_Command0_Click:
Exit Sub
Err_Command0_Click:
MsgBox Err.Description
Resume Exit_Command0_Click
End Sub
使用上面的脚本单击按钮会产生以下错误消息:
数据库引擎无法锁定表“FileInfoStamp”,因为它已被其他人或进程使用
我认为正在发生的事情是我添加到表单中的字段(文件名和文件日期)在表单打开时锁定了 FileInfoStamp 表,因此当脚本尝试重新创建 FileInfoStamp 时,由于表被锁定,因此无法执行此操作。
我认为这可以通过在上述脚本的开头添加一个DoCmd.Close然后在脚本末尾添加一个DoCmd.OpenForm来解决(本质上是在运行 Make Table 命令然后重新打开时关闭表单最后的表格)。
所有这一切都是关闭表单并显示相同的错误消息。所以我猜即使表单“关闭”了与表单上字段的连接仍然以某种方式保持活动状态(...?)
任何有关我如何解决此问题的帮助将不胜感激。谢谢你。