首页 > 解决方案 > 所有相关 Access 表中的重复记录,在按钮单击事件中分配了新的 PK/FK

问题描述

我有一个包含 5 个表的 Access 数据库:

  1. Report_Start 在 [Report_ID] 上持有 PK

  2. CommSummary 在 [Report_ID] 上持有 FK

  3. MRPCSummary 在 [Report_ID] 上持有 FK

  4. SQESummary 在 [Report_ID] 上持有 FK

  5. MEPSummary 在 [Report_ID] 上持有 FK

Report_ID 将表 2-4 链接到表 1。 关系

用户在存储在 Report_Start 表中的用户表单(报告日期、供应商、采购员、计划员等)上输入新的报告信息。在不同的时间,不同的用户使用不同的表格来填充表 2-4,所有数据都通过 [Report_ID] 链接,即报告日期和供应商名称连接在一起。

我在启动表单上添加了一个按钮,该按钮需要允许用户从所有 5 个表中复制现有数据并分配一个新的 Report_ID 和新的 Report_Date。这是必需的,因为每次我们报告供应商状态时,用户只有一两个字段需要更新。他们想将旧记录复制到新记录,然后进行一两次更新。(我已经有了允许从每个表中更新现有记录的表单和代码。) 复制按钮

新的 Report_ID 和 Report_Date 将由用户从对话窗口中选择生成:

a) 现有报告日期 (Me.Cbo_OldDate)

b) 供应商 (Me.Cbo_Vendor)

c) 新报告日期 (Me.Txt_NewDate) 新数据

经过几天的研究,我发现一条 SQL 语句与我想要完成的结果很接近,但是我遇到了语法错误。在攻击关系表 2-5 之前,我只是想在上面的 #1 表中复制以证明我的代码。

到目前为止我的代码:

启动表格(用户点击复制记录按钮):

Private Sub Cmd_Copy_Click()

DoCmd.OpenForm "New_Data", acNormal, , , , acDialog

End Sub

用户选择现有报告信息和新报告日期的 New_Data 表单:

Private Sub Cmd_OK_Click()

Dim OldID As String
Dim NewID As String
Dim NewDate As Date
Dim strSQL As String


    OldID = Me.Cbo_OldDate & Me.Cbo_Vendor
    NewID = Me.Txt_NewDate & Me.Cbo_Vendor

    NewDate = Me.Txt_NewDate

    Me.Txt_Old_ID = OldID
    Me.Txt_New_ID = NewID

strSQL = "SELECT r.Report_ID, r.Report_Date, r.Vendor, r.Buyer, r.MRPC, r.SQE, r.MEP WHERE (((r.Report_ID) = ('" & OldID & "') INTO Report_Start as r WHERE (((r.Report_ID) = '" & NewID & "' and ((r.Report_Date) = (#" & NewDate & "#)));"

CurrentDb.Execute strSQL, dbFailOnError

End Sub

我得到的错误是:

错误

如果有人可以帮助我确定错误在哪里,然后给我一些关于如何复制关系表中的信息并将新 FK 分配为新 PK 的指导,我将不胜感激!我不想让每个用户打开他们各自的表单来只复制他们的数据。

最后,由于表之间的关系,我想要一个按钮来复制所有,然后每个用户都可以按日期查找他们的信息并提供他们的更新。

标签: sqlms-accessvbams-access-2010

解决方案


您可以使用 select 执行并插入其中,如下所示:

strSQL = "INSERT INTO Report_Start " & _
         " SELECT " & newID & ", #" & newDate & "#, r.Vendor, r.Buyer, r.MRPC, r.SQE, r.MEP" & _
         " FROM  Report Start as r " & _
         " WHERE r.Report_ID = " & oldID

推荐阅读