我在Access数据库中有一个订单创建表单,用户在其中选择产品,并使用SQL select语句触发VBA代码以检索该产品的当前可用性。这就是它的设置方式:
以下是我的表单中的VBA代码,由[Batch]组合框的更新触发:
Dim VBatch As String
VBatch = Me.Batch.Value
Dim VAvail As Double
Dim mySQL As String
Dim conn1 As ADODB.Connection
Set conn1 = CurrentProject.Connection
Dim rs1 As New ADODB.Recordset
rs1.ActiveConnection = conn1
mySQL = "SELECT Available FROM Inventory WHERE BatchID = " & "'" & VBatch & "'"
rs1.Open mySQL
rs1.MoveFirst
VAvail = rs1.Fields("Available").Value
Forms!ChangeOrders.ChangeOrderSubform.Form.Availability.Value = VAvail
rs1.Close
conn1.Close
Set rs1 = Nothing
Set conn1 = Nothing
这已经好几周工作了,当包装商品被添加到Packages表中并且订单被添加到OrderDetail表中时,检索正确的可用金额。昨天它开始从InventoryPrep查询返回Packaged字段。
我尝试了很多东西,然后从查询中创建了一个表,并使用SELECT语句在表中查找它。那很有效。我的查询设置有一些原因导致它停止识别我的计算字段。我需要帮助!
这是我第一次发帖,希望这是足够的信息。我是Access和VBA的新手,但我从这个论坛的阅读中学到了很多东西。我希望有人可以帮助或让我知道其他信息可以解释这个问题。
答案 0 :(得分:1)
要从表或查询中读取单个值,您的代码有点过头了。
对于此方案,Access具有DLookup
function。
VAvail = DLookup("Available", "Inventory", "BatchID = '" & VBatch & "'")
Forms!ChangeOrders.ChangeOrderSubform.Form.Availability.Value = VAvail
这就是所需要的一切。