我有一个包含5个表的Access数据库:
用户在用户表单(报告日期,供应商,买方,计划员等)上输入新的报告信息,该信息存储在Report_Start表中。在不同的时间,不同的用户使用不同的表单来填充表2-4,并且所有数据都通过[Report_ID]链接,这是连接在一起的报告日期和供应商名称。
我在启动表单上添加了一个按钮,该按钮需要允许用户复制所有5个表中的现有数据并分配新的Report_ID和新的Report_Date。这是必需的,因为每次我们报告供应商状态时,用户只有一个或两个字段要更新。他们想要将旧记录复制到新记录,然后进行一到两次更新。 (我已经有表格和代码,允许从每个表更新现有记录。)
用户从对话框窗口中选择将生成新的Report_ID和Report_Date:
a)现有报告日期(Me.Cbo_OldDate)
b)供应商(Me.Cbo_Vendor)
经过几天的研究,我发现了一个接近我想要完成的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
我得到的错误是:
如果有人可以帮我确定错误的位置,然后给我一些关于如何在关系表中复制信息并指定新FK等于新PK的指导,我会非常感激!我不希望让每个用户打开他们的个人表单来仅复制他们的数据。
最后,由于表之间的关系,我想要一个按钮来复制所有,然后每个用户可以按日期查找他们的信息并提供他们的更新。
您可以使用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