2015-10-14 150 views
1

我最近问了一个类似的question。但是,我不认为我知道当时想用我的VBA完成的程度。我正在使用Access 2010并在表单中创建on_click命令。MS Access VBA查询。选择其次,然后计算结果

所以我的目的是建立一个查询,我将要采取的方法如下:

varSQL2 = "SELECT * FROM Inventory WHERE Part_ID=" & rs!Part_ID & ";" 
Set rs2 = db.OpenRecordset(varSQL2, dbOpenDynaset) 
varStock_Level = rs2!Stock_Level +rs!Quantity 

rs!quantityrs!Part_ID是从另一个查询早些时候在我的代码。 stock_levelpart_IDInventory表中的字段。

我现在需要能够创建一个查询来统计有多少记录由于varSQL2而返回。所以我可以做一些沿线:

varSQL2 = "SELECT * FROM Inventory WHERE Part_ID=" & rs!Part_ID & ";" 
Set rs2 = db.OpenRecordset(varSQL2, dbOpenDynaset) 
varStock_Level = rs2!Stock_Level +rs!Quantity 
    if count >1 then 
     ....[code].... 
    end if 

我真的不知道从哪里开始,略有困惑我的自我与子查询。我相信我不需要2个查询。任何帮助表示赞赏。

回答

0

从内存:

rs.movelast 
debug.print rs.recordCount 

你必须始终Movelast之前使用RecordCount。我的表格/查询很大,可能很耗时。

+0

然后我指这是'如果rs2.recordcount> 1'? – LiamH

+0

确实.......... –

+0

它看起来很完美!在很多情况下,这比预期的要容易得多。 – LiamH

2

有几种方法:

  1. 创建COUNT函数的查询(类似于你在refered问题所做的)
  2. 使用您的查询,使用rs2.movelast和读取rs2.RecordCount
  3. 算出来使用域数

    Dim lngRows As Long lngRows = DCount("*", "Inventory", "Part_ID='" & rs!Part_ID & "'")