VBA 代码的重复记录运行时错误

Posted

技术标签:

【中文标题】VBA 代码的重复记录运行时错误【英文标题】:Duplicate Record run time error for VBA code 【发布时间】:2016-07-15 13:57:29 【问题描述】:

我目前在 Access 2013 中工作。

我遇到的问题是我试图将记录从主窗体复制到带有按钮的子窗体。

我的表格包括:

tbl40_1                      tbl40_1_changes

ID (PK)                      ID (PK)
System_Name                  40_1_ID (FK)
Configuration_Type           System_Name
Configuration_ID             Configuration_Type
Reference_Document           Configuration_ID 
Approval_Authority           Reference_Document
Approval_Mechanism           Approval_Authority
Item_Location                Approval_Mechanism 
Custodian                    Item_Location  
                             Custodian              

按钮的当前代码包括:

Private Sub Duplicate_Click()

Dim strInsert
Dim db As DAO.Database

StrInsert = "INSERT INTO tbl40_1_changes_subform (ID, [System_Name], [Configuration_Type], [Configuration_ID], [Reference_Document], [Approval_Authority], [Approval_Mechanism], [Item_Location], [Custodian]" & _
            "SELECT ID, [System_Name], [Configuration_Type], [Configuration_ID], [Reference_Document], [Approval_Authority], [Approval_Mechanism], [Item_Location], [Custodian]" & _
            "FROM frm40_1" & _
            "WHERE [40_1_ID] = " & Me.tbl40_1_changes_subform.Form.txt40_1_ID

Set db = CurrentDb()

db.Execute strInsert, dbFailOnError
Set db = Nothing


End Sub

当我单击按钮时,我收到 [StrInsert = "INSERT INTO"、"Select"、"From"、"Where"] 的运行时错误。我不确定这段代码有什么问题,因为它突出显示了整段代码。

【问题讨论】:

你忘了用)关闭第一行 包括Debug.Print StrInsert,运行代码,然后在“立即”窗口中检查INSERT 语句。 (Ctrl+g 将带您到那里。)您需要匹配此模式:INSERT INTO TableName (<field list>) ... 您必须在 <field list> 周围包含两个括号 --- 看起来您的缺少第二个。 【参考方案1】:

您在换行符处缺少空格。

添加Debug.Print StrInsert 即可查看。

而且,正如 Hynek Bernard 所写,INSERT 子句缺少结束 )

试试

StrInsert = "INSERT INTO tbl40_1_changes (ID, [System_Name], [Configuration_Type], [Configuration_ID], [Reference_Document], [Approval_Authority], [Approval_Mechanism], [Item_Location], [Custodian])" & _
            " SELECT ID, [System_Name], [Configuration_Type], [Configuration_ID], [Reference_Document], [Approval_Authority], [Approval_Mechanism], [Item_Location], [Custodian]" & _
            " FROM frm40_1" & _
            " WHERE [40_1_ID] = " & Me.tbl40_1_changes_subform.Form.txt40_1_ID

Debug.Print StrInsert   ' Ctrl+G shows Debug output

编辑

我认为您的 WHERE 子句非常不合适。你是从frm40_1(主窗体上)复制到子窗体上的tbl40_1_changes,对吧?

如果tbl40_1_changes.ID 是自动编号,则无法设置。

那么你需要类似的东西

StrInsert = "INSERT INTO tbl40_1_changes (40_1_ID, [System_Name], [Configuration_Type], [Configuration_ID], [Reference_Document], [Approval_Authority], [Approval_Mechanism], [Item_Location], [Custodian])" & _
            " SELECT ID, [System_Name], [Configuration_Type], [Configuration_ID], [Reference_Document], [Approval_Authority], [Approval_Mechanism], [Item_Location], [Custodian]" & _
            " FROM tbl40_1" & _
            " WHERE ID = " & Me.ID

【讨论】:

您好安德烈,感谢您的回复。我复制了您的代码,但仍然收到相同的错误代码(运行时错误 2465:应用程序 - 定义或对象 - 定义错误)。 请仔细检查该错误,@Orange56。 Access 错误 #2465 的消息以 “Microsoft Access 找不到字段...”开头 @Orange56:已编辑目标表名称。如果仍然失败,请发布完整的调试输出。并阅读How to debug dynamic SQL in VBA @HansUp 我检查了访问错误 #2465,它正在显示(“应用程序定义的或对象定义的错误”),不知道为什么。当我在谷歌中搜索代码时,它显示“ Microsoft Access 找不到该字段”。 @Orange56:另外,如果40_1_ID 是外键,您也必须插入它。我强烈建议在查询设计器中构建您的查询,并且仅当它完成并工作时,将 SQL 复制回 VBA。

以上是关于VBA 代码的重复记录运行时错误的主要内容,如果未能解决你的问题,请参考以下文章

excel vba 运行时错误

Excel 2007 VBA ActiveWorkbook SaveAs 未保存...运行时错误 1004

VBA:运行时自动化错误 - “代码执行已被中断”

从 C# 运行 Excel 宏:从 VBA 捕获运行时错误

运行时错误“3264”访问 2010 VBA

奇怪的 excel-vba 运行时错误,不会删除现有工作表