Ms access 调用RunSQL时表被锁定或正在使用

Ms access 调用RunSQL时表被锁定或正在使用,ms-access,Ms Access,我有一些代码可以重新排列表单上的某些项,但只有一个SQL查询。在代码运行之前,我的所有表都未锁定,但由于某些原因,我在运行时出错: DoCmd.RunSQL ("Select * Into MasterTable From Year07 Where 'ClassName' = '7A'") 错误: 数据库引擎无法锁定表,因为其他人或进程已在使用该表。错误3211若要完成此操作,必须锁定另一用户当前正在使用的表。请等待其他用户完成该表的操作,然后重试该操作 你知道我能做些什么来阻止表被锁定吗?我

我有一些代码可以重新排列表单上的某些项,但只有一个SQL查询。在代码运行之前,我的所有表都未锁定,但由于某些原因,我在运行时出错:

DoCmd.RunSQL ("Select * Into MasterTable From Year07 Where 'ClassName' = '7A'")
错误:

数据库引擎无法锁定表,因为其他人或进程已在使用该表。错误3211若要完成此操作,必须锁定另一用户当前正在使用的表。请等待其他用户完成该表的操作,然后重试该操作


你知道我能做些什么来阻止表被锁定吗?

我在Access崩溃后重新打开数据库时看到了这一点。对于我来说,重启通常会解决这个问题。

MSAccess的哪个版本?不确定较新的版本,但对于Access 2003和以前的版本,如果您确定数据库中没有人,则可以通过删除.ldb文件来清除崩溃后的锁。

表单的记录源中是否包含MasterTable?如果是这样,则无法在窗体打开时替换或修改其结构

除了表锁问题外,SELECT语句中还有一个逻辑错误

Where 'ClassName' = '7A'
字符串ClassName永远不会等于字符串7A。因此,您的选择永远不能返回任何记录。如果ClassName是Year07表中某个字段的名称,请丢弃该字段名称周围的引号

Where ClassName = '7A'

我猜,但是如果您使用的表单绑定到MasterTable,那么在表单中打开它时,您不能运行查询以用新MasterTable替换它

我建议您放弃MakeTable查询SELECT INTO,而是使用普通的append查询插入。不过,在附加新数据之前,您需要清除旧数据


基本上,在我看来,MakeTable查询不属于生产应用程序,任何使用MakeTable查询自动化的过程都应该替换为一个持久的临时表,该临时表在添加新数据之前被清除。

这是access 2007。我已尝试删除.ldb,但一旦我再次打开原始的.accdb,我就会遇到同样的问题。是的,主表位于表单的记录源中。您知道我如何在不关闭表单、执行操作然后重新打开表单的情况下解决此问题吗?我还更改了“ClassName”问题,尽管在SQL数据表视图中,这并没有造成什么不同。再次感谢:我最好的猜测是,无论主表出现在表单的记录源中的什么地方,都应该用Select*替换2007年的ClassName='7A'。瞧,你甚至不需要MasterTable作为一个实际的桌子。但这只是我的猜测。如果您编辑您的问题以向我们显示记录源,您可能会得到更好的猜测。这样做的目的是让许多表包含不同的数据,但一次只能显示一个组合框选择的数据。当组合框更改时,主表中的值更改为仅显示所需内容。我不确定access中如何正确执行此操作,但现在知道了。谢谢呵呵。我昨天误读了这个答案——汉斯说了和我在他的第一段中做的一样的话,然后很快又转到了另一个问题上。在阅读中,第一部分并没有为我注册,否则我永远不会发布我自己的答案+1你说得更好,大卫。。。特别是MakeTable查询不属于生产应用程序。+1在我看来,MakeTable查询不属于生产应用程序