基本方法是简单地使用链接表。
使用 ODBC 时,您应该不会在这里看到任何真正的区别。ODBC 是首选方法,Microsoft 已宣布结束对 oleDB 的支持(大约 10 年前,.net 社区离开了 oleDB 和 ADO)。
您可以将表单绑定到这些链接表并获得良好的性能。简单的技巧是减少和限制提取的记录。当您启动这些绑定表单时,可以通过使用 SIMPLE where 子句来完成此限制。
因此,如果您启动绑定的发票表单并在标准打开表单命令中提供 where 子句,那么只会提取一条记录。当然,如果您有一个绑定的子表单,那么也只会从服务器中提取正确的记录。因此,在 99% 的情况下,使用 oleDB 或 ADO 没有任何优势。
因此,作为一种通用开发方法,您可以在大多数情况下使用绑定表单。
需要注意的是,对于某些连接和任何具有聚合查询的内容,您希望将链接表用于 sql 视图。您还可以考虑对报告使用传递,但传递往往需要更多的工作,并且链接视图意味着您可以保留现有的 VBA 代码,这些代码可能(希望)使用“where”子句来打开这些报告并再次限制记录拉下网络管道。
对于执行服务器端命令的动态传递,我使用以下代码:
Dim qdfPass As DAO.QueryDef
Set qdfPass = CurrentDb.QueryDefs("MyPass")
qdfPass.SQL = "exec sp_myProc " & "p1"
qdfPass.Execute
如果您需要以上内容来返回记录,那么只需执行以下操作:
Dim qdfPass As DAO.QueryDef
Dim rstData As DAO.recordSet
Set qdfPass = CurrentDb.QueryDefs("MyPass")
qdfPass.SQL = "exec sp_myProc " & "p1"
set rstData = qdfPass.OpenRecordSet
因此,您可以使用很少的代码即时更改/修改上述 sql 以进行传递查询。归根结底,您因此获得了一流的性能,并且只需对现有应用程序进行极少的编码更改即可做到这一点。
所以这里目前推荐的方法是使用DAO。请记住,对于 oleDB(和 ADO)的 sql server 生命周期支持现已宣布。看这里:
http://blogs.msdn.com/b/sqlnativeclient/archive/2011/08/29/microsoft-is-aligning-with-odbc-for-native-relational-data-access.aspx