Ms access 使用VBA从查询更新表

Ms access 使用VBA从查询更新表,ms-access,vba,Ms Access,Vba,VBA/宏新手需要上述方面的帮助 Table: Inventory Product Value a Value b 1. Product 1 0 0 2. Product 2 0 0 3. Product 3 0 0 Query: Qry Product Value VAL 1. Product 1 100 a 2. Product 2 200 a

VBA/宏新手需要上述方面的帮助

Table: Inventory

   Product      Value a    Value b
1. Product 1    0          0
2. Product 2    0          0
3. Product 3    0          0

Query: Qry

   Product     Value    VAL
1. Product 1   100      a
2. Product 2   200      a
3. Product 3   300      b
马可的结果

Table: Inventory

   Product      Value a    Value b
1. Product 1    100        0
2. Product 2    200        0
3. Product 3    0          300
在不改变模式或考虑其他方法的情况下:我特别需要一个宏(不是更新查询)来更新table.field“Inventory.Value”中的相应产品,并使用查询“qry”中的值,具体取决于它是在表中所述的a列还是b列中

我知道会有一个iif声明和一个插入,但就我的生命而言,我就是无法让它工作

编辑:我愿意接受具有相同结果的其他想法


这是一个淡化版的数据库。

您可以尝试这样的方法

Dim rst As DAO.Recordset
Dim sql As String

sql = <The sql string for your query>

Set rst = CurrentDb.OpenRecordset(sql, dbOpenDynaset)

With rst
    Do Until .EOF
        If !VAL = "b" Then
             sql = "UPDATE Inventory SET [Value b] = " & !Value & " WHERE Product = '" & !Product "' ;"
             CurrentDB.Exectute sql
        End If
        .MoveNext
    Loop
End With
Dim rst作为DAO.Recordset
将sql设置为字符串
sql=
Set rst=CurrentDb.OpenRecordset(sql,dbOpenDynaset)
用rst
直到。EOF
如果!VAL=“b”那么
sql=“更新库存集[值b]=”&!值&“其中产品=”&!产品“'
CurrentDB.Execute sql
如果结束
.下一步
环
以

感谢骷髅人,这帮了大忙

这是宏(字段和表名与我的原始帖子不同)


两个问题:1)您使用的是宏还是数据宏?数据宏在Access 2010中是新的,不是在“宏”部分中创建的,而是从表中创建的。2) 您可以将宏与更新查询结合使用吗?或者您有什么原因不能使用更新查询吗?这可能会显示我的无知,但我以前从未听说过Data Macro,因此我一定会对此进行研究。到目前为止,我只使用了经典的vba宏。我也不知道如何完成这个更新查询,假设会涉及sql。我遇到语法错误:如果sql字符串超过3行,可以吗?dis CurrentDb保持不变还是我必须输入我的DB的名称?如果SQL语句保持不变,您可以将代码分成三行。当isIt拒绝超出“sql=”位时,CurrentDB保持不变。您可以发布您正在尝试的代码吗?很明显,您的SQL字符串有问题-您没有包括“
Option Compare Database
Option Explicit

Sub Opdateer()

Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim sql As String

Set dbs = CurrentDb

sql = "SELECT Orders.Warehouse, OrderDetail.Product, OrderDetail.OrderDetailStatus, Sum(OrderDetail.Qty_mt) AS SumOfQty_mt FROM Orders INNER JOIN OrderDetail ON Orders.ID = OrderDetail.OrderNumber GROUP BY Orders.Warehouse, OrderDetail.Product, OrderDetail.OrderDetailStatus;"

Set rst = dbs.OpenRecordset(sql, dbOpenDynaset)

With rst
    Do Until rst.EOF
        If !OrderDetailStatus = "Allokeer" Then
             sql = "UPDATE [InventoryCT] SET [StockAllocated] = " & !SumOfQty_mt & " WHERE [ProductCT] = " & !Product & " ;"
            dbs.Execute (sql)
            Else
             sql = "UPDATE [InventoryCT] SET [StockOpgelaai] = " & !SumOfQty_mt & " WHERE [ProductCT] = " & !Product & " ;"
            dbs.Execute (sql)
        End If
        .MoveNext
    Loop
End With
rst.Close
dbs.Close
End Sub