Sql 在VBA代码中运行更新查询

Sql 在VBA代码中运行更新查询,sql,vba,ms-access-2010,Sql,Vba,Ms Access 2010,我正在尝试使用Access制作一个小的清单程序,但我没有太多的知识,到目前为止我所做的只是通过谷歌搜索。我已经成功地编写了使用未绑定表单存储数据的代码,现在我想通过在另一个表的未绑定表单中输入的数据来更新表的某些特定字段。讨论中的两个表是交易和库存。库存有3个字段:零件号、位置和数量。我希望库存数量从库存移出的位置扣除,并添加到它要去的位置 表Stock Stock_PartNo Stock_Location Stock_Qty 2288 SAWRH001

我正在尝试使用Access制作一个小的清单程序,但我没有太多的知识,到目前为止我所做的只是通过谷歌搜索。我已经成功地编写了使用未绑定表单存储数据的代码,现在我想通过在另一个表的未绑定表单中输入的数据来更新表的某些特定字段。讨论中的两个表是交易和库存。库存有3个字段:零件号、位置和数量。我希望库存数量从库存移出的位置扣除,并添加到它要去的位置

Stock

Stock_PartNo    Stock_Location  Stock_Qty
2288            SAWRH001        85
2288            SAWRH002        54
3214            SAWRH003        544
4567            SAWRH001        32
5555            SAWRH002        128
5555            SAWRH005        874
5678            SAWRH002        321
6544            SAWRH004        465
6666            SAWRH003        45
6666            SAWRH004        87
7777            SAWRH003        365
7890            SAWRH002        352
8765            SAWRH005        57
8888            SAWRH004        54
9999            SAWRH005        21
以下是我的未绑定表单代码:

Private Sub Command39_Click()

Dim db As Database, rsCust As Recordset


    Set db = CurrentDb
    Set rsCust = db.OpenRecordset("Transaction", DB_OPEN_DYNASET)

        rsCust.AddNew
        rsCust("Trans_PartNo") = Me!Combo52
        rsCust("Trans_Desc") = Me!Text19
        rsCust("Trans_Disp") = Me!Text21
        rsCust("Trans_Recv") = Me!Text23
        rsCust("Trans_Qty") = Me!Text25
        rsCust("Trans_Date") = Me!Text29
        rsCust.Update

        MsgBox "Material transfer information has been updated"

        Call ClearControls

    rsCust.Close
    db.Close
End Sub
这些数据将存储在一个名为Transaction的表中,该表只是从一个地方移动到另一个地方的记录历史。我想要的是,表库存应该使用此表单进行更新,因此,如果零件号2288从SAWRH001传输到SAWRH005,那么它应该自动更新表库存。据我所知,我需要嵌入一个SQL查询,但我不知道如何在VBA中做到这一点

db.Execute "UPDATE Transaction SET Stock_Qty = Stock_Qty - " & Val(Me!Text25) _
& " WHERE Stock_PartNo = '" & Me!Combo52 _
& "' AND Stock_Location = '" & fromLocation & "'", dbFailOnError

db.Execute "UPDATE Transaction SET Stock_Qty = Stock_Qty + " & Val(Me!Text25) _
& " WHERE Stock_PartNo = '" & Me!Combo52 _
& "' AND Stock_Location = '" & toLocation & "'", dbFailOnError
有关示例代码,请参阅链接。

带参数:

Dim db As Database
Dim qdf As QueryDef

Set db = CurrentDb
sSQL = "UPDATE Stock SET Stock_Qty = Stock_Qty + [p1] " & _
     " WHERE Stock_PartNo = [p2] AND Stock_Location = [p3]"

''Temporary query
Set qdf = db.CreateQueryDef("", sSQL)
''No need to worry about quotes etc
qdf.Parameters("p2") = Me!Combo52

''Subtract
qdf.Parameters("p1") = Me.Text25 * -1
qdf.Parameters("p3") = Me.From
qdf.Execute dbFailOnError

''Add
qdf.Parameters("p1") = Me.Text25
qdf.Parameters("p3") = Me.To
qdf.Execute dbFailOnError

可以使用MS Access的参数,这甚至是一个好主意。您忘记了dbfailonerror。@Remou:我想参数可以与querydef对象一起使用。为此,OP必须创建一个querydef。对吗?请随意编辑我遗漏的任何内容的答案。请注意,Val经常是危险的。感谢您提供答案Remou,但需要更新的表不是Stock Transaction。事务表只是一个日志。我想要的是,当我的表单代码完成时,以下值用于更新表Stock rsCust(“Trans_Disp”)=Me!Text21 rsCust(“Trans_Recv”)=我!Text23 rsCust(“Trans_数量”)=我!Text25现在我在寻找一种东西,它可以使用零件号更新两端的库存。减去数据已流出的仓库的库存,然后将库存添加到它将要进入的仓库。谢谢大家的帮助:)上面有一个例子说明了如何做到这一点。只需适当地更改字段和控件名称。谢谢你的帮助:)我错过了阅读你发布的链接,在我阅读完后返回此页面后,我注意到你自己已经更改了参数:)