Access编程的最佳实践

juc*_*bee 7 ms-access vba rad

我想知道一些可以改进使用Access和VBA编程语言设计解决方案的过程的想法.当然,我不是在谈论一般的最佳编程实践,而只是与Access和VBA直接相关.

大家都知道,VBA具有较差的面向对象编程支持,没有继承,多态等等.那么如何一次确保DRY和KISS?有一些解决方案如何在VBA中实现其他语言模式和策略的通用,但坦率地说,它们往往过于复杂.哪些值得实施?

在我开始一个新的Access项目(如果有的话)之前),我希望收集最佳实践的集合,因为根据我的经验,我知道在Access中使用VBA(以及Access本身),避免糟糕的设计概念和以混乱,不可读和重复的多次代码结束.

Phi*_*ier 2

我想在这里添加一些与同一问题以某种方式相关的其他问题和答案。这些指针可能会导致我自己对这些问题的答案,但请不要犹豫,浏览其他人的答案!

MS Access 作为企业软件

测试 MS-Access 应用程序的最佳方法

在 MS-Access 上与多个程序员一起工作

有关使用 MS-Access 中的 SQL Server GUIDS 的建议

我必须承认 Access 的主要限制之一是有限的对象模型。我对无法将自己的属性和方法添加到 Form 对象感到特别恼火。我最近通过创建 2 个额外的对象找到了解决此问题的有效方法:

  • “AllMyForms”对象,它实际上维护2个对象集合:一个是标准的Access表单集合,另一个是“customForm”对象的所有实例的集合。这两个集合都使用打开的表单的 hwnd 属性进行索引(或者更具体地说,是表单实例的 hwnd 属性,允许我打开同一表单的多个实例)。

  • “customForm”对象,其中列出了表单实例的自定义属性和方法

通过这种方式,我可以引用诸如以下的属性:

accessForms:指标准属性和方法

AllMyForms.accessForm(hwnd).name
Run Code Online (Sandbox Code Playgroud)

通过其 .hwnd 值引用访问表单的 .name 属性

顺便说一下,下面的 debug.print 将给出相同的结果:

? screen.ActiveForm.name
? AllMyForms.accessForm().name   'default value for hwnd is screen.activeForm.hwnd'
Run Code Online (Sandbox Code Playgroud)

自定义表格:属性

AllMyForms.customForm(hwnd).selectClause
Run Code Online (Sandbox Code Playgroud)

将引用用于创建表单实例的基础记录集的 SELECT 子句

自定义表格:方法

.agregate 方法可用于 customForm 对象,将计算表单“列”的 sum/min/max/avg(即连续表单中控件的值的总和):

AllMyForms.customForm().agregate("lineAmount","sum")
Run Code Online (Sandbox Code Playgroud)

将为我提供表单当前/活动实例上显示的所有“lineAmount”值的总和。