【问题标题】:Best practices in Access programming [closed]Access编程的最佳实践[关闭]
【发布时间】:2010-12-01 16:21:21
【问题描述】:

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

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

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

【问题讨论】:

  • 我只想说这是一个很好的问题。避免访问中的 DRY 需要大量的纪律,但可以做到。但是绝对不能阻止混合 ui 和 biz 逻辑。但我认为重要的是要记住,接入点是极其快速的发展。 Access 是目前用于 Windows 应用程序开发的最快的开发平台。所以它有一席之地。赛斯

标签: ms-access vba rad


【解决方案1】:

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

MS Access as enterprise software

Best way to test an MS-Access application

Working with multiple programmers on MS-Access

Recommendations on using SQL server GUIDS from MS-Access

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

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

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

这样,我可以参考如下属性:

accessForms:参考标准属性和方法

AllMyForms.accessForm(hwnd).name

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

顺便说一句,下面的 debug.print 会给我同样的结果:

? screen.ActiveForm.name
? AllMyForms.accessForm().name   'default value for hwnd is screen.activeForm.hwnd'

自定义表单:属性

AllMyForms.customForm(hwnd).selectClause

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

自定义表单:方法

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

AllMyForms.customForm().agregate("lineAmount","sum")

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

【讨论】:

  • 我假设您关于客户属性/方法的观点是您不能将它们全部添加到一个地方,即默认情况下您必须将它们添加到每个表单的类模块中?但这可以通过围绕表单的独立类模块包装器来完成,听起来这正是您所做的。你能澄清一下吗?
  • 虽然我了解 customForm() 包装器的价值,但我看不到您的自定义表单集合的价值。我看不到它提供的现有 Access 集合尚不具备的功能。
  • 一些澄清:基本思想是能够将我自己的属性/方法添加到表单(意味着 Access 表单的实例)。我有一个独特的过程来打开这样的实例,使用“allMyForms.open myFormName、mySelectQuery(如果有的话)等”方法。每次调用此方法时,我都会将一个成员添加到 o_AccessForms 私有集合中,作为现有表单的一个新实例。我还将向 o_CustomForms 集合添加一个成员,作为我的“customForm”对象的一个​​新实例。通过这样做,我可以访问已打开表单的标准属性和自定义属性。
  • 使用级联窗口,例如,我有 allMyForms.customForm().master 属性,它指的是“打开”当前表单的表单实例。
  • (o_AccessForms 和 o_CustomForms 是 AllMyForms 对象的两个私有集合)
【解决方案2】:

Access 编程最佳实践的权威来源是这本书:

Access 2002 桌面开发者手册
http://www.amazon.com/Access-2002-Desktop-Developers-Handbook/dp/0782140092

如果您认真对待 Access 中的编程,您应该得到一份副本。这些人是专家。

我意识到这本书似乎过时了,但其中的所有信息仍然适用。我想它永远不会更新,因为这种开发有点小众领域。但是 Access 内部并没有太大变化(它是仅存的仍然使用相当于 VB6 方言的软件开发工具之一),而且书中的大部分信息仍然很好。

关注客户端/服务器开发的配套书籍在这里:

Access 2002 Enterprise Developer's Handbook
http://www.amazon.com/Access-2002-Enterprise-Developers-Handbook/dp/0782140106

【讨论】:

  • 我最喜欢的两本书。第一个版本的每个版本我都有。
【解决方案3】:

当我进行 Access 编程时,我必须做的一件事是出于绑定原因使用大量隐藏字段。我确保我使该字段不可见,并将字段的颜色更改为前景白色和背景红色,以便人们知道这是一个隐藏字段。

我使用的另一个最佳实践是为我的所有共享代码使用模块。养成将大量可重用代码放在模块中的习惯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2010-10-06
    • 2011-10-28
    • 2010-09-10
    相关资源
    最近更新 更多