这涉及我们的 Access 2007 中的两个表。
“ Station Master”表由工作站记录组成
“ Move-Add-Change”表包含针对特定项目 ID的移动、添加、更改步骤的记录。
我创建了一个查询以从“Move-Add-Change”中提取与Project Id匹配的所有记录。然后,我需要进行如下处理:
遍历"Pull MAC Records by Project # Qry"
查询中的每一行(那里也有一个从 1 开始编号的序列字段)
如果该行中的 Action 字段是 Move:
如果同一行的“To Loc”不是以 TSS 开头(用于 Inventory Loc),则将“Station Master ”中的记录更新为 Loc Name 等于查询中同一行的“From Loc”
"Pull MAC Records by Project # Qry"
字段,更改其值到"Pull MAC Records by Project # Qry"
查询中同一行的 To Loc 字段如果同一行的“To Loc”以TSS开头,则删除“Station Master”
"Pull MAC Records by Project # Qry"
中Loc Name与查询中同一行的“From Loc”匹配的记录。
如果行中的 Action 字段是Add:
- 在“Station Master”中创建一条新记录,Loc Name 是该行的“To Loc”字段
如果该行中的 Action 字段是 Change:
- 执行与移动相同的操作,并使用查询中同一行的注释字段中的信息更新“站主”的描述
"Pull MAC Records by Project # Qry"
代码必须一行一行地输入,"Pull MAC Records by Project # Qry"
因为我们可能会将另一个站点移动到刚刚移开的位置。
查询的部分结果示例:
Project Id Seq Action From Loc To Loc Notes
A123456 1 Move WFC1234 TSSRepair For OEM service
A123456 2 Move WFC9999 WFC1234 Test station
...
如果我调用查询来进行更新,它似乎不会逐行遍历并且会提示违规(我认为当原始WFC1234记录仍然存在时,它试图将WFC9999更改为WFC1234 ,导致重复)。
这是我的查询的 SQL:
UPDATE [Station Master], [Pull MAC Records by Project # Qry]
SET [Station Master].[Loc Name] = [Pull MAC Records by Project # Qry]![To Loc],
[Station Master].[Loc Function] = Left([Pull MAC Records by Project # Qry]![To Loc],3), [Station Master].[Loc #] = Right([Pull MAC Records by Project # Qry]![To Loc],Len([Pull MAC Records by Project # Qry]![To Loc])-3)
WHERE
((([Station Master].[Loc Name]) = [Pull MAC Records by Project # Qry]![From Loc]));
我做错了什么?我可以在 VBA 代码中拥有所有这些过程吗(我不擅长)?