确定 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。
我通常是一名 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。