在按钮单击事件中分配新PK / FK的所有相关Access表中的重复记录

问题描述 投票:0回答:1

我有一个包含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.relations

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

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

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

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

b)供应商(Me.Cbo_Vendor)

c)新报告日期(Me.Txt_NewDate)new data

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

我的代码到目前为止:

启动表单(用户单击COPY RECORD按钮):

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

我得到的错误是:

error

如果有人可以帮我确定错误的位置,然后给我一些关于如何在关系表中复制信息并指定新FK等于新PK的指导,我会非常感激!我不希望让每个用户打开他们的个人表单来仅复制他们的数据。

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

sql access-vba ms-access-2010
1个回答
2
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.