基于另一个表更新表

时间:2013-06-16 08:11:51

标签: sql access-vba ms-access-2007

这涉及Access 2007中的两个表。

“Station Master”表包含工作站记录

“移动 - 添加 - 更改”表包含用于移动,添加和更改特定内容项目ID 的步骤的记录。

我创建了一个查询,以从“项目ID 匹配的”Move-Add-Change“中提取所有记录。 然后,我需要按如下方式处理:

通过"Pull MAC Records by Project # Qry"查询中的每一行(有一个序列字段) 在那里从1开始计数编号)

如果行中的Action字段为Move:

  • 如果同一行的“To Loc”未以TSS开头(用于库存地点),请更新“Station Master ”中的记录如果Loc Name等于"Pull MAC Records by Project # Qry"查询中同一行的“From Loc”字段,请将其值更改为"Pull MAC Records by Project # Qry"查询中同一行的To Loc字段

  • 如果同一行的“To Loc”以TSS开头,请删除Loc name匹配的“Station Master”中的记录来自"Pull MAC Records by Project # Qry"查询中同一行的“Loc”。

如果行中的操作字段为添加

  • “Station Master”中创建新记录,Loc Name是行的“To Loc”字段

如果行中的“操作”字段为“更改:

  • 使用"Pull MAC Records by Project # Qry"查询
  • 中相同行的备注字段中的信息,与Move plus udpate “Station Master”的说明相同

代码必须在"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
...

如果我调用查询进行更新,似乎它不会逐行进行并会提示违规(我认为它试图将 WFC9999 更改为 WFC1234 当原始 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代码(我不擅长)吗?

1 个答案:

答案 0 :(得分: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

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