【发布时间】:2012-10-01 13:33:53
【问题描述】:
我写了一些 VBA:
For x = LBound(resProdID) To UBound(resProdID)
CurrentDb.QueryDefs("qry_findID_vba").SQL = "" & _
"SELECT tbl_products.ProdID " & _
"FROM tbl_products " & _
"WHERE (tbl_products.Size = " & resSize(x) & " " & _
"AND tbl_products.SupplID = '" & Forms.frm_suppliers.SupplID & "')"
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Set dbs = CurrentDb()
Set rst = dbs.OpenRecordset("qry_findID_vba")
MsgBox rst.RecordCount
If rst.RecordCount <> 0 Then
rst.MoveLast
rst.MoveFirst
newProdID(x) = rst.Fields(0).Value
MsgBox "This never fires"
End If
rst.Close
Set rst = Nothing
dbs.Close
Set dbs = Nothing
Next x
当我运行它时,会弹出一个显示 0 的框。我单击“确定”,然后它又重复了一次。这是因为我的 resProdID 数组中有两个项目。
但是,如果我正常打开查询“qry_findID_vba”,它会像我预期的那样显示一行。
为什么 VBA 不返回这一行?我做错了什么吗?
【问题讨论】:
-
您是否验证了 resSize 数组和 Forms.frm_suppliers.SupplID 中的值实际上与您正在搜索的表中的值一致?
-
你的 SQL 是什么?您应该添加一个显示 SQL 的 debug.print 或 msgbox。该 SQL 是否返回一行?如果没有,很可能,那就是问题所在。
-
DAO 已经过时了。我可以建议改用 ADO 吗?
-
@DavidW 是的,它们都是整数。如您所见,我修改了一个实际查询,如果我在运行 Sub 后打开它,它会显示一行。所以我知道它在那里,VBA 就是找不到它。这是奇怪的事情,我不知道为什么..
-
@DanielCook 是的,我将 SQL 作为 InputBox 的默认值输出。然后我尝试在查询对象中运行 SQL,它按预期工作。如果您查看上面的评论,我已经验证对象“qry_findID_vba”正在工作..
标签: sql ms-access vba dao ms-access-2010