如何在Access VBA + SQL开发中提高效率?

时间:2009-07-09 09:44:21

标签: ms-access vba access-vba

我是rails开发人员的80%ruby,但仍需要做一些Access VBA工作。

其中一些是非常糟糕的系统,很久以前就已经建成,被全球大企业使用,因此大部分工作只是增强旧系统。

这些技术基本上是MS Access作为前端,链接表通过ODBC作为后端链接到SQL服务器。

现在,我真的觉得我需要帮助,只是想知道是否有人可以按照面向对象的模式构建优雅的VBA应用程序?

如果你能给我一段代码来证明它有多好,那就更好了,谢谢。

5 个答案:

答案 0 :(得分:8)

要记住的第一个问题是学习MS访问没有神奇的捷径。多年来,我学到了很多开发平台,从大型机系统,数据库系统,到PC上的手动编码汇编器。我从头开始编写了两个工资单系统(加拿大税收公式包含在这些系统中)。一个系统从头开始编写Pascal,我甚至编写了自己的数据引擎。

毫无疑问,ms-access是一个复杂的开发系统。

您可以在访问中构建华丽外观的丢失应用程序。看看这些屏幕截图:

http://www.fairsoftware.com/screenshots.aspx

请注意上面屏幕截图中的炫酷色带。

问题是你不能在一天内学习Unix,而且你不能在一天内学习Oracle。您也无法在一天内学习MS访问权限。如果您要维护的那些应用程序很复杂,那么聘请具有4 - 5年经验的开发人员就是您所需要的。这个想法,你会以某种方式加快ms访问速度,然后说vb.net,或c#在这里真的是一个错误的概念。

事实上,我甚至可以说你可以比学习MS访问更快地学习Oracle。虽然MS访问的学习曲线不是那么陡峭,但它很长。

与访问相比,VB6是在公园散步。 VB6表单很简单,但访问中的表单非常复杂(我们的事件和属性数量约为给定表单的3倍)。例如,在访问中,我们有两个事件在表单加载(on-open和on-load)时触发。 VB6表单(甚至.net表单)只有一个事件。 on-open事件有取消选项。如果设置cancel = true,则表单将不会加载,也不会显示。

逻辑上,这意味着当您调用表单时,表单有两个不同的事件,用于两个不同的目的。因此,开启事件将具有用于验证和测试某些数据条件的代码(并允许您取消)。如果未取消on-open事件,则会触发on-load事件并加载表单。

逻辑上,此时这意味着在表单上设置控件的变量或初始值的代码需要放在on-load事件中(事实上,Controls不能被修改,只能在on open事件中检查) 。因此,在典型的表单加载中出现的两个进程之间存在非常好的粒度和区别。值得注意的是,市场上的大多数产品都没有这两个独立的事件。

作为开发人员,您可以放置​​适当的代码并为给定目的使用正确的事件。使用访问权来确定用于这些事情的事件需要一些经验。你可以问一下是否有一本书可以解释这个问题,但这就像问是否有一本书告诉你何时使用组合框而不是列表框?我不认为有这样一本书。

组合框的文档将解释组合框的含义以及如何使用它。对于on open事件,文档访问也是如此。您可以阅读on-open的内容,但是作为开发人员,您必须弄清楚何时适合使用该事件。当适当使用组合框或列表框时,也是如此。在一天结束时,唯一的解决方案以及如何了解这些问题将是您作为产品开发人员的体验。

我有一篇文章讨论在MS访问中使用类对象,以及何时在此处使用它们:

http://www.members.shaw.ca/AlbertKallal/Articles/WhyClass.html

如果您正在寻找从表格的所有内容到使用Windows API的报告的代码示例,那么这里有一个很好的参考:

http://www.mvps.org/access/

答案 1 :(得分:1)

你有同情心 - 访问VBA在任何意义上都不是面向对象的,比如Ruby。在解决Access中的开发问题时,您将不得不改变思维方式;这些应用程序几乎总是围绕数据行和集合的概念而不是对象。用户界面通常以隐藏大量管道的方式绑定到数据行和集合。

已经说过可以在Access中建立完美可靠的可维护应用程序,并小心谨慎。祝你好运。

答案 2 :(得分:1)

Access中的一件事就是不会教你如何创建和使用独立的类模块。它们具有面向对象的某些方面,但不是很多,但它们在使代码更易于管理方面非常有用,因为您可以将大量操作包装在独立的类模块中,然后将其视为可以具有的对象多个实例。你没有获得继承和多态以及许多与OO福音一起使用的流行语,但如果你从未广泛使用它们,那么值得看看他们可以做些什么。

答案 3 :(得分:1)

这篇文章已经陈旧,但是将Access视为企业长期应用策略的一部分是一个很好的例子。

http://www.fmsinc.com/MicrosoftAccess/Strategy/index.asp

赛斯

答案 4 :(得分:0)

查看Implements语句,即通过接口的多态性。这就像VBA得到的OO一样。