访问2013表格字段中增加的数量

时间:2015-10-06 14:40:04

标签: sql ms-access-2013

美好的一天。我对我的代码中发生的事情感到有点困惑。我有一个用户表单,可以收集txtQntyRecdcboSupplySource。我计算lookupValue。它工作得很好。它已成功将txtQntyRecd置于正确的tblWarehouseLocations.WQuantity位置。代码是:

    updateQnty = "UPDATE tblSupplySources INNER JOIN ((tblWarehouseLocations " & _
            "INNER JOIN tblSupplySource_WarehouseLocation ON tblWarehouseLocations.WLocation_ID = tblSupplySource_WarehouseLocation.SWLocation_ID)) " & _
            "ON tblSupplySources.SupplySourceID = tblSupplySource_WarehouseLocation.Supply_Source_ID " & _
            "SET tblWarehouseLocations.WQuantity = '" & Me.txtQntyRecd & "'" & _
              "WHERE (((tblSupplySource_WarehouseLocation.Supply_Source_ID)= " & Me.cboSupplySource & ") " & _
             " AND ((tblWarehouseLocations.WLocation_ID)=" & lookupValue & "))" 
     CurrentDb.Execute updateQnty, dbFailOnError

我想要做的是将下一个数量添加到同一位置。如果我将SET语句更改为以下内容,我会得到奇怪的结果:

    SET tblWarehouseLocations.WQuantity = tblWarehouseLocations.WQuantity + '" & Me.txtQntyRecd & "'"

如果我在第一个语句中输入200,我在WQuantity字段中得到200。当我更改为第二个语句并尝试向200添加1时,我得到211的结果。如果我再次添加1,则结果为223.再次添加1,结果为236.

有人可以解释发生了什么,为什么结果不是201,202和203?将来我还需要从WQuantity中减去数量。

谢谢

2 个答案:

答案 0 :(得分:3)

您在整数周围添加引号并将其作为字符串附加。将其更改为:

".....
SET tblWarehouseLocations.WQuantity = tblWarehouseLocations.WQuantity + " & val(Me!txtQntyRecd) & "....
...."

我已将.更改为!,因为我认为它仍然是对象属性和控件之间的一个很好的区别,并使用val函数作为它将字符串数值转换为整数值。

这是您的完整查询:

' When I use values from controls, I like to store them in vars
Dim quantityReceived As integer
quantityReceived = val(Me!txtQntyRecd)

updateQnty = "UPDATE tblSupplySources INNER JOIN ((tblWarehouseLocations " & _
        "INNER JOIN tblSupplySource_WarehouseLocation ON tblWarehouseLocations.WLocation_ID = tblSupplySource_WarehouseLocation.SWLocation_ID)) " & _
        "ON tblSupplySources.SupplySourceID = tblSupplySource_WarehouseLocation.Supply_Source_ID " & _
        "SET tblWarehouseLocations.WQuantity = tblWarehouseLocations.WQuantity + " & quantityReceived & _
          " WHERE (((tblSupplySource_WarehouseLocation.Supply_Source_ID)= " & Me.cboSupplySource & ") " & _
         " AND ((tblWarehouseLocations.WLocation_ID)=" & lookupValue & "))" 

答案 1 :(得分:-1)

我解决了这个问题。我创建了一个SELECT查询来获取WQuantity中的当前数量。现在quantityReceived = Me!txtQntyRecd +当前金额。使用SET tblWarehouseLocations.WQuantity =“& quantityReceived它工作正常。但是,如果看起来那么麻烦。

    ' lookupValue gives the index into the tblWarehouseLocations where WQuantity resides
    Dim lookupValue As Integer
lookupValue = DLookup("[WLocation_ID]", "[tblWarehouseLocations]", "[Location_Name] = '" & Me.cboWLocation & "'")

'Define SQL Query
strSQL = "select tblWarehouseLocations.WQuantity FROM tblWarehouseLocations WHERE (((tblWarehouseLocations.WLocation_ID)= " & lookupValue & "))"

Set rs = db.OpenRecordset(strSQL)

If IsNull(rs!WQuantity) Then
    dbvalue = 0
Else
    dbvalue = rs!WQuantity
End If

Dim quantityReceived As Integer
quantityReceived = Val(Me!txtQntyRecd) + dbvalue


updateQnty = "UPDATE tblSupplySources INNER JOIN ((tblWarehouseLocations " & _
    "INNER JOIN tblSupplySource_WarehouseLocation ON tblWarehouseLocations.WLocation_ID = tblSupplySource_WarehouseLocation.SWLocation_ID)) " & _
    "ON tblSupplySources.SupplySourceID = tblSupplySource_WarehouseLocation.Supply_Source_ID " & _
    "SET tblWarehouseLocations.WQuantity = " & quantityReceived & _
    " WHERE (((tblSupplySource_WarehouseLocation.Supply_Source_ID)= " & Me.cboSupplySource & ") " & _
    " AND ((tblWarehouseLocations.WLocation_ID)=" & lookupValue & "))"

    CurrentDb.Execute updateQnty, dbFailOnError