我正在使用Access2003 VBA处理生产物料清单的递归数据。我构建了一个类模块,让主表具有静态范围。这似乎简化了递归——当我遍历一个BOM时,它使我可以自由地向下和向上计数级别。我不是重复打开同一个记录集,而是过滤了很多内容。
在进行了这项工作之后,我阅读了关于对象关系建模的内容,并决定不引用记录集,而是引用一个记录。那么该记录的字段可以是属性。经过大量的工作和许多大错特错的胜利的激动之后,我意识到这种方法没有任何好处,因为访问是基于表的。
我的课程模块仍然像以前一样有用。我的问题是关于下面两个备选版本。第一个实例使用两个实例(父实例、子实例)。第二个使用一个,然后重用它。显然,第一个是ORM影响。
有没有理由选择其中一个而不是另一个?另外,请注意末尾的斜体字:如果我不需要它(因为我不需要关于父级的更多信息),这会改变答案吗?有人能帮我全面思考吗?
(注意,我关闭记录集,但不关闭类实例。我的理解是,VBA实例关闭自己,让它们这样做是公认的实践。我似乎把伪代码带到了伪代码的新层次…目标是清晰,希望能奏效。)
VERSION 1
Property Sub ReviewPart ( Parent_Part_ID )
Get Parent_Part_ID
Create instance of Class --> Get recordset
Filter Class recordset ( Parent_Part_ID )
Exploit Class recordset
See if Parent_Part_ID has Childs
If it does:
Open recordset of Childs
For each Child
Get Child_Part_ID
Create instance of Class --> Get recordset
Filter Class recordset ( Child_Part_ID )
Exploit Class recordset
See if Child_Part_ID has Childs
If it does:
Instance New ReviewPart ( Child_Part_ID )
Otherwise:
Nothing; Move On
Next Child
Close recordset of Childs
Otherwise:
Move On
Exploit Class recordset ( still points to parent )
VERSION 2
Property Sub ReviewPart ( Parent_Part_ID )
Get Parent_Part_ID
Create instance of Class --> Get recordset
Filter Class recordset ( Parent_Part_ID )
Exploit Class recordset
See if Parent_Part_ID has Childs
If it does:
Open recordset of Childs
For each Child
Get Child_Part_ID
Create instance of Class --> Get recordset
Filter Class recordset ( Child_Part_ID )
Exploit Class recordset
See if Child_Part_ID has Childs
If it does:
Instance New ReviewPart ( Child_Part_ID )
Otherwise:
Nothing; Move On
Next Child
Close recordset of Childs
Otherwise:
Move On
Filter Class recordset ( Parent_Part_ID )
Exploit Class recordset ( still points to parent )