确定 Access 2003 中每个项目的现有项目和所需项目之间的差异

Determining Difference Between Items On-Hand and Items Required per Project in Access 2003

我通常是一名 PHP 程序员,但我目前正在 MS Access 2003 中从事一个项目,而且我是一名完全的 VBA 新手。我正在尝试做一些我可以在 PHP 中轻松完成的事情,但我不知道如何在 Access 中进行。事实如下:

表及相关字段:
tblItems: item_id, on_hand
tblProjects:project_id
tblProjectItems: project_id, item_id

目标:根据手头的物品,确定我可以做哪些项目。

我需要找到一种方法来将每个项目的必需项目与现有项目进行比较,以确定是否缺少任何项目。如果不是,请将该项目添加到潜在项目列表中。在 PHP 中,我将使用 array_diff 函数将现有项目数组与所需项目项目数组进行比较;如果没有区别,请将 project_id 添加到一系列潜在项目中。

例如,如果...

$arrItemsOnHand = 1,3,4,5,6,8,10,11,15  
$arrProjects[1] = 1,10  
$arrProjects[2] = 8,9,12  
$arrProjects[3] = 7,13  
$arrProjects[4] = 1,3  
$arrProjects[5] = 2,14  
$arrProjects[6] = 2,5,8,10,11,15  
$arrProjects[7] = 2,4,5,6,8,10,11,15  

...结果应该是:

$arrPotentialProjects = 1,4

在 Access 中有什么方法可以做到这一点吗?

考虑一个查询来实现您的目标:"Determine which projects I could potentially do, given the items on-hand."

SELECT
    pi.project_id,
    Count(pi.item_id) AS NumberOfItems,
    Sum(IIf(i.on_hand='yes', 1, 0)) AS NumberOnHand
FROM
    tblProjectItems AS pi
    INNER JOIN tblItems AS i
    ON pi.item_id = i.item_id
GROUP BY pi.project_id
HAVING Count(pi.item_id) = Sum(IIf(i.on_hand='yes', 1, 0));

该查询计算每个项目所需的项目数以及现有的项目数。

如果这两个数字不匹配,则意味着至少有一项该项目所需的物品不在手边。

因此 HAVING 子句从查询结果集中排除了这些行,只留下两个数字匹配的行 --- 这些是手头所有必需项目的项目。

我意识到我的描述不是很好。 (抱歉。)我认为,如果您 运行 带有和不带有 HAVING 子句的查询……然后再次阅读描述,应该更有意义。

无论如何,如果该查询为您提供了所需的信息,我认为您不需要为此处理 VBA 数组。如果您可以将该查询用作表单的 RecordSource 或用作列表或组合框的 RowSource,则可能根本不需要 VBA。