使用Dlookup或RecordSet返回多个值

时间:2013-09-25 21:00:55

标签: database vba ms-access

我正在尝试计算库存控制的FIFO审核分析。这一切都在MS Access 2010中完成。

单位1已添加到今日库存。 明天将添加第2单元。

下周当选择一个单位进行消费时,理想情况下我们正在使用单元1,但如果没有,我正在建立一个查询来识别它。到目前为止,我已经使用DLookup函数在一定程度上工作了。

但是,我需要确定哪些特定的旧单元受到FIFO故障的影响。这就是DLookup失败的地方。

Unit #            In Date              Out Date
A                 1/1/13                1/14/13
B                 1/1/13                1/14/13
C                 1/4/13                1/13/13
D                 1/4/13                1/13/13

上面会导致我的查询吐出单位C两次,单位D两次,这很好。但是,查询中的每个记录在使用Dlookup时仅返回单元A.那是因为Dlookup只能找到符合条件的第一个值,而不是所有记录。

例如:

Inefficiently Used Unit                   Overlooked Unit
C                                              A
C                                              A 
D                                              A 
D                                              A  

这就是DLookup函数的样子:

DLookUp(“[Container]”,“Container Efficiency”,“[Carrier] ='”& [Carrier]&“'和[Container Type] ='”& [Container Type]&“'并且[在日期]<#“& [在日期]&”#和[外出日期]>#“& [外出日期]&”#“))

我需要设计它,以便标准产生多个值。

Inefficiently Used Unit                   Overlooked Unit
C                                              A
C                                              B 

我做了研究,看起来使用Recordsets和VBA将是最佳选择。我现在正在玩这个(在复制语法时遇到一些麻烦,我正在考虑使用带有标准的FindFirst / FindNext,然后循环),但是如果可能或者如何编写这段代码,我会得到相互矛盾的意见。

1 个答案:

答案 0 :(得分:1)

如果要从单个行中的单个字段返回单个值,请使用DLookup。如果要返回符合条件的记录数,请使用DCount。

如果您无法想象它可以与任何一个一起使用,那么您可能需要编写自己的函数并使用DAO记录集(如果您出于某种原因更喜欢它,则使用ADO)。

您的问题似乎缺少一些重要信息。您想要计数还是希望能够看到实际匹配的行?无论答案是什么,您的问题确实与您的表结构(数据库的设计)和SQL有很大关系。在不知道表的设计的情况下,几乎不可能为您提供可行的SQL。

你的最后两张图有点误导。您希望查询返回两行,在第一列中显示一种类型的单位,在第二列中显示另一种单位吗?如果是这样,您可能需要使用交叉表查询。标准查询确实可以进行分组,但它们不能将单个字段中的变体分解为单独的列。

再一次,您可以尝试创建一个满足您需求的查询,并在您的问题上发布SQL,并提供您真正想要的内容的描述。数据会以报告或表格形式出现吗?您希望如何显示:分组,计数,个人?