在所有相关的 Access 表中重复记录,并在按钮单击事件中分配了新的 PK/FK
Duplicate records in all related Access tables with new PK/FK assigned at button click event
我有一个 Access 数据库有 5 tables:
Report_Start 在 [Report_ID]
举行 PK
CommSummary 在 [Report_ID]
上持有 FK
MRPCSummary 在 [Report_ID]
上持有 FK
SQESummary 在 [Report_ID]
上持有 FK
MEPSummary 在 [Report_ID]
上持有 FK
Report_ID 将 tables 2-4 链接到 Table 1。
用户在存储在 Report_Start table 中的用户表单中输入新的报告信息(报告日期、供应商、采购员、计划员等)。在不同的时间,不同的用户使用不同的表格来填充 tables 2-4,并且所有数据都由 [Report_ID] 链接在一起,即报告日期和供应商名称连接在一起。
我在启动表单上添加了一个按钮,需要允许用户从所有 5 个 table 中复制现有数据并分配一个新的 Report_ID 和新的 Report_Date .这是必需的,因为每次我们报告供应商状态时,用户只有一两个字段需要更新。他们想将旧记录复制到新记录,然后进行一两次更新。 (我已经有了允许从每个 table 更新现有记录的表格和代码。)
新的 Report_ID 和 Report_Date 将由用户从对话框中选择生成 window:
a) 现有报告日期 (Me.Cbo_OldDate)
b) 供应商 (Me.Cbo_Vendor)
c) 新报告日期 (Me.Txt_NewDate)
经过几天的研究,我发现一个 SQL 语句接近我想要完成的,但是我遇到了语法错误。在攻击关系 tables 2-5.
之前,我只是想复制上面的 #1 table 来证明我的代码
到目前为止我的代码:
启动表单(用户点击复制记录按钮):
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
我得到的错误是:
如果有人能帮我确定错误在哪里,然后给我一些指导,告诉我如何在关系 tables 中复制信息并将新的 FK 分配给新的 PK,我会非常感谢!我不想让每个用户打开他们的个人表格来只复制他们的数据。
最后,由于table之间的关系,我想一键复制所有,然后每个用户都可以按日期查找他们的信息并提供他们的更新。
您可以使用 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
我有一个 Access 数据库有 5 tables:
Report_Start 在 [Report_ID]
举行 PK
CommSummary 在 [Report_ID]
上持有 FK
MRPCSummary 在 [Report_ID]
上持有 FK
SQESummary 在 [Report_ID]
上持有 FK
MEPSummary 在 [Report_ID]
上持有 FK
Report_ID 将 tables 2-4 链接到 Table 1。
用户在存储在 Report_Start table 中的用户表单中输入新的报告信息(报告日期、供应商、采购员、计划员等)。在不同的时间,不同的用户使用不同的表格来填充 tables 2-4,并且所有数据都由 [Report_ID] 链接在一起,即报告日期和供应商名称连接在一起。
我在启动表单上添加了一个按钮,需要允许用户从所有 5 个 table 中复制现有数据并分配一个新的 Report_ID 和新的 Report_Date .这是必需的,因为每次我们报告供应商状态时,用户只有一两个字段需要更新。他们想将旧记录复制到新记录,然后进行一两次更新。 (我已经有了允许从每个 table 更新现有记录的表格和代码。)
新的 Report_ID 和 Report_Date 将由用户从对话框中选择生成 window:
a) 现有报告日期 (Me.Cbo_OldDate)
b) 供应商 (Me.Cbo_Vendor)
c) 新报告日期 (Me.Txt_NewDate)
经过几天的研究,我发现一个 SQL 语句接近我想要完成的,但是我遇到了语法错误。在攻击关系 tables 2-5.
之前,我只是想复制上面的 #1 table 来证明我的代码到目前为止我的代码:
启动表单(用户点击复制记录按钮):
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
我得到的错误是:
如果有人能帮我确定错误在哪里,然后给我一些指导,告诉我如何在关系 tables 中复制信息并将新的 FK 分配给新的 PK,我会非常感谢!我不想让每个用户打开他们的个人表格来只复制他们的数据。
最后,由于table之间的关系,我想一键复制所有,然后每个用户都可以按日期查找他们的信息并提供他们的更新。
您可以使用 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