我有一些代码可以重新排列表单上的某些项目,但只有一个SQL查询。在代码运行之前我的所有表都没有锁定但由于某种原因我在运行时遇到错误:
DoCmd.RunSQL ("Select * Into MasterTable From Year07 Where 'ClassName' = '7A'")
错误:
数据库引擎无法锁定表,因为它已被其他人或进程使用。 (错误3211)要完成此操作,必须锁定当前由另一个用户使用的表。等待其他用户完成表的使用,然后再次尝试操作。
我有什么想法可以阻止桌子被锁定?
答案 0 :(得分:4)
MasterTable是否包含在您表单的记录源中?如果是这样,则在表单打开时,您无法替换它或修改其结构。
除了表锁定问题外,SELECT语句中还存在逻辑错误。
Where 'ClassName' = '7A'
字符串 ClassName 永远不会等于字符串 7A 。因此,您的SELECT永远不会返回任何记录。如果ClassName是Year07表中字段的名称,则丢弃围绕字段名称的引号。
Where ClassName = '7A'
答案 1 :(得分:3)
我猜,但如果您使用的是与MasterTable绑定的表单,则在表单中打开它时,无法运行查询以将其替换为新的MasterTable。
我建议您摆脱MakeTable查询(SELECT INTO),而是使用普通追加查询(INSERT)。但是,在添加新数据之前,您需要清除旧数据。
基本上,在我看来,MakeTable查询不属于生产应用程序,并且您使用MakeTable查询自动化的任何进程都应该替换为在之前清除的持久临时表。新数据被附加到它。
答案 2 :(得分:0)
在Access崩溃后重新打开数据库时,我已经看到了这一点。通常对我来说,重启已经解决了这个问题。
答案 3 :(得分:0)
什么版本的MSAccess?不确定更新的,但对于Access 2003和之前的版本,如果您确定没有人在数据库中,您可以通过删除.ldb文件在崩溃后清除锁。