使用Access VBA,如何计算select查询中的输出记录数并将计数存储为VBA变量?

时间:2017-03-19 07:01:53

标签: sql vba access

我正在使用Access 2013,特别是由于老板的问题,我很难使用VBA代码编辑器。最小化保存的查询和表格的指令 - 我也没有权限修改表格结构。

我有两个表:InvoiceDetails和AllItems,由ItemID加入。

INVOICEDETAILS     ALLITEMS
¯¯¯¯¯¯¯¯¯¯¯¯¯¯     ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
ItemID←-----------→ItemID
InvoiceNumber      Invoiced (Yes/No)

有时,InvoiceDetails中的Item可以单独记入,在这种情况下,AllItems中的相应Invoiced将被取消选中。我想比较

  • TotalItemCount =具有给定Items" 1" {/ li>的InvoiceNumber的数量

  • InvoicedItemCount =具有给定Items" 1"的InvoiceNumber的数量仍然是Invoiced

对于第一个号码,我有

TotalItemCount = DCount("ItemID", "InvoiceDetails", "InvoiceNumber = 1")

对于第二个数字,我有一个SELECT查询,它给出了SQL中的计数,但我不知道如何将其转换为VBA变量InvoicedItemCount

SELECT Count(InvoiceDetails.ItemID) 
FROM InvoiceDetails INNER JOIN AllItems 
     ON InvoiceDetails.LoadID = AllItems.LoadID 
WHERE InvoicedDetails.InvoiceNumber = 1 AND AllItems.Invoiced = True);

我知道DoCmd.RunSQL,但AFAIK只运行查询,并且不会将可输出的整数存储为VBA变量。有没有办法在VBA中完成这项工作?

1 个答案:

答案 0 :(得分:1)

我从this question获得了解决方案,我由伯尼执导。

假设SQL查询返回一条记录,只有一个字段,我们想要那个单一的值:

Dim rst As DAO.Recordset
Dim strSQL As String

strSQL = "SELECT x FROM y WHERE z=z;"
Set rst = CurrentDb.OpenRecordset(strSQL)

VariableName = rst.Fields(0)

rst.Close
Set rst = Nothing