2

这涉及我们的 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 代码中拥有所有这些过程吗(我不擅长)?

4

1 回答 1

0

根据您是否想要一个实际的循环,您可以使用 VBA 来执行此操作:

'Set your variables

Dim myR as Recordset
Dim myR2 as Recordset

'Then set your recordsets to the two tables you want to work with

Set myR = db.OpenRecordset("Station Master", dbOpenDynaset)
Set myR2 = db.OpenRecordset("Move-Add-Change", dbOpenDynaset)

'Now select the table you wish to work with until the end of file(EOF)

while Not myR.EOF
    If myR![Action] = "Move" Then

        'Code goes here if true

    Else

        'Code goes here if false

    End If

    'Move to the next record and loop if not end of file(EOF)

    myR.MoveNext
Loop

'Make sure to set close your recordsets when done

Set myR = Nothing
Set myR2 = Nothing

另请查看此处此处以获取有关循环的更多示例。

于 2013-06-16T11:49:11.743 回答