由于您已经拥有了一些asp.net业务逻辑,因此您可以将其作为Web服务(asmx文件)打开。搜索Microsoft Office Web Services Toolkit以获取您版本的Access(xp / 2003等),它将为您编写VBA代理类来调用Web服务。您可以通过代码(VBA读写控件)将Web服务数据绑定到表单,或者使用来自Web服务的数据创建本地临时表并使用常规访问绑定。根据您最熟悉的内容(代码/ TSQL),您可以将逻辑放在存储过程中或放在业务逻辑层中或混合使用(两者都)。我发现测试代码比测试存储过程更容易,并且不喜欢将业务逻辑绑定到SQL Server,即如果您想要更改数据库或者想要离线开发/测试组件而没有数据库。新的.NET功能,例如LINQ具有相当好的性能,因此您不必依赖存储过程进行数据库活动。
保留访问前端用户界面,直到您将所有业务逻辑/数据访问重构为Web服务。 然后可以创建一个消耗Web服务的asp.net应用程序,或者如果需要的话,可以创建一个WinForm应用程序。(在此期间要避免使用WPF作为UI,因为它是一个陡峭的学习曲线,并且还没有与访问数据表视图相匹配的数据网格。)
报告:
访问报告可以升级到SQL Server Reporting Services(报告中的VBA不会升级,最好在存储过程中编写一些T-SQL)。 如果您没有完整的SQL Server产品,则仍然可以使用ReportViewer控件编写报告(请参见
http://www.gotreportviewer.com/),绑定到ADO.NET数据集的asp.net(或使用Visual Studio标准版或更高版本中的winform)。
其他选项:
您可以编写.NET DLL并使用COM互操作性。这种方法允许您逐步开始编写功能。不要使用.NET UI,例如Winform,因为它无法与Access UI协调良好。您可以编写业务逻辑或数据访问逻辑,然后从VBA调用这些类。然后,如果需要,可以将此代码移动到ASP.NET或Web服务中。
排除的事项:
我不喜欢编写具有并排版本的新应用程序的方法。作为单个开发人员,您已经有足够的烦恼了。您可能最终会在两个版本中添加功能并调试两个版本而不是一个版本。
VB6表单Interop无法用于Access。
如所述,ADP相当死亡。(我从来没有喜欢过它们,因为我经常使用本地表来优化性能,它们只能通过代码调用而不能链接)
你可以使用Visual Studio中的Visual Basic升级向导将vba模块和类模块转换为vb.net,但它不能将所有内容升级(例如dao/ado代码到ado.net代码),并且不会创建针对.net优化的代码,根据vba代码的设计,可能不容易编写单元测试。我建议重新编写代码(如果你认真考虑测试,请尝试测试驱动开发来查看是否喜欢它)。