更新表单字段事件,INSERT INTO另一个表

时间:2015-02-12 18:13:11

标签: vba ms-access access-vba ms-access-2007

当"是"进入我的数据库的表单字段我想触发在另一个表中插入新的数据行"在后台"并继续通过我的表格。有什么想法吗?不确定"如果"语句语法...在" DoCmd.RunSQL strSQL"

上获取调试错误
Private Sub Data_Destruction_Certificate_AfterUpdate()

Dim strSQL As String, Response As Integer

strSQL = "INSERT INTO Data_Destruction ([DonateID], [Make-Model], [Model_Serial_Number], [Media_Type], [Media_Serial_Number], [Date of Destruction]) " & "VALUES ('" & DonateID & "', '" & "Unknown" & "', '" & "Make - Model" & "', '" & "Model_Serial_Number" & "', '" & "Media_Type" & "', '" & "Media_Serial_Number" & "', '" & 1 / 1 / 2000 & "')"

    DoCmd.SetWarnings False
    DoCmd.RunSQL strSQL
    DoCmd.SetWarnings True

    Response = acDataErrAdded      'now requeries the database to refresh the list
    Response = acDataErrContinue

End Sub

按照指示做了。无法发布图片...没有积分。最初的"运行时错误是3346,"查询值和目标字段的数量不一样"

调试打印输出声明:

INSERT INTO Data_Destruction ([DonateID], [Make-Model], [Model_Serial_Number], [Media_Type], [Media_Serial_Number], [Date of Destruction]) VALUES ('24', 'Unknown', 'Make - Model', 'Model_Serial_Number', 'Media_Type', 'Media_Serial_Number', '0.0005')

显然是我的" date"值语法不正确

确定...用#....#修复日期并添加到MediaID(自动编号字段)中 - 现在包括我要插入的表格中的所有字段。跑了代码,得到了:

INSERT INTO Data_Destruction ([MediaID],[DonateID], [Make-Model], [Model_Serial_Number], [Media_Type], [Media_Serial_Number], [Date_of_Destruction]) VALUES ('', '28', 'Unknown', 'Make - Model', 'Model_Serial_Number', 'Media_Type', 'Media_Serial_Number', '1/1/2000')

1 个答案:

答案 0 :(得分:0)

INSERT声明的最新版本包含8个VALUES但仅包含7个字段。我格式化了语句,以便更容易计算它们:

INSERT INTO Data_Destruction
    (
        [MediaID],
        [DonateID],
        [Make-Model],
        [Model_Serial_Number],
        [Media_Type],
        [Media_Serial_Number],
        [Date_of_Destruction]
    )
VALUES
    (
        '',
        '28',
        'Unknown',
        'Make - Model',
        'Model_Serial_Number',
        'Media_Type',
        'Media_Serial_Number',
        '1/1/2000'
    )

您需要删除其中一个VALUES或包含第八个字段以接受额外值。

我建议您将INSERT语句粘贴到Access查询设计器中的新查询的SQL视图中。根据需要调整语句,直到错误消失,然后使用您想要的值向表中添加一行。一旦你在那里工作,修改你的VBA代码以产生相同的语句文本。

之后我建议你丢弃DoCmd.SetWarnings False并执行这样的声明......

CurrentDb.Execute strSQL, dbFailOnError

但是,我不确定你是否还需要更多东西。主要是我很困惑,因为我不明白为什么你有这些...

Response = acDataErrAdded
Response = acDataErrContinue

您打算响应完成什么?