我需要有关将 ADOdb 与 MS Access 前端和 SQL 后端一起使用的帮助和指导。也许是一个很好的指导视频。
我在 MS Access 中使用 ADOdb 已有 15 年了,现在我刚刚迁移到 SQL Server。请参阅附图。
迁移后,我的一些代码可以正常工作,但也存在问题。
我的主要问题是我的 ADO 连接。我是否更新提供程序,保持 ADOdb 连接相同或更新我的提供程序并指向 SQL DB。就像我说的,我当前的 ACE 提供商 80% 到 90% 的时间都在工作。
考虑下面的代码,我的提供商是否应该更新?视频教程会很棒。
Function funCreateNewWO() As Long
Dim adoRst As New ADODB.Recordset
Dim adoConn As ADODB.Connection
Dim sqlString As String
Set adoConn = CurrentProject.Connection
sqlString = " SELECT [WO_ID_PK] FROM tbl_WorkOrders"
With adoRst
.Open sqlString, adoConn, adOpenStatic, adLockOptimistic
If .State = adStateOpen Then
.AddNew
.Update
funCreateNewWO = !WO_ID_PK
End If
.Close
End With
End Function
打开+使用链接表的现有 ADO 代码有效,因此,是的,您可以继续使用这些表中的现有链接。当然,切换到 SQL Server 意味着您已经重新链接了这些表。
因此,您的 ado 代码不需要更改。
您可以在想要使用传递查询的情况下,或者说执行 SQL 存储过程保存与 SQL Server 的连接。您必须将该连接放置在代码中,或者有一个本地表,甚至可能在启动时读取文本 ini 文件。
那么,对于某些操作,特别是那些涉及多个表连接的操作?那么是的,您应该在该代码中使用连接,并像这样使用一些 VBA 记录集代码。
但是,绑定表单等可以继续工作、继续使用,并且它们将使用现在驻留在每个表中的连接。
但是,强烈建议对于某些已保存的查询(访问客户端前端),将此类查询移至 SQL Server,另存为视图,然后在 FE 中链接到该视图。对于单个表的查询,不会注意到太大(如果有的话)性能差异。
但是,对于任何涉及多个表或分组等的客户端保存的 SQL 查询?然后将该 SQL 查询移动到服务器端视图,从 Access 链接到该视图。 (在大多数情况下,为链接视图名称提供与客户端保存的 SQL 查询相同的名称)。这将带来惊人的速度。
那么,在大多数情况下,打开记录集等的现有 VBA 代码?该代码可以保持“原样”,并且该代码当然将针对并使用 FE 中的链接表。如前所述,由于每个链接表都有自己的连接,因此您的 ADO + VBA 代码应该继续工作。 (所以,是的,您可以继续使用那些现有的链接表,并继续使用这些表中存在的连接)。
链接表,每个链接表都有一个连接字符串作为该链接表的一部分。
出于安全原因,您可以在不包含 UID 和密码的情况下链接表。这涉及在启动时让一些代码执行一次性登录,因此所有链接表现在都可以工作,尽管它们在此类链接表中不包含也不包含 UID 和密码。
我应该指出,DAO 仍然是更好的选择,并且在大多数情况下优于 ADO。但是,如果您的应用程序可以运行并使用 ADO,那么这并不是一个大问题。然而,链接表和绑定表单在幕后使用 ODBC 和 DAO。
绑定表格可以继续使用。甚至说直接绑定到 100 万行表的表单?
如果您运行此 VBA 代码以打开一个记录的表单,例如:
DoCmd.OpenForm "frmInvoices",,,"InvoiceNum = " & lngIV
那么该表单只会从网络管道中拉取一条记录,尽管该表单已直接绑定到具有 100 万行的链接表(指向 SQL Server)。 Access 很智能,当您使用上述简单的 VBA 打开表单命令时,不会提取所有记录。
上述内容也适用于报告,并且再次使用打开表单(或报告)的“where”关闭将在服务器端(通过 SQL 服务器)正确过滤,并且仅通过网络发送完成的 1 条记录,并且甚至这样做当相关表单/报告直接绑定到具有 100 万行的链接表时。
那么对于链接表,或者将 FE 链接到视图?您可以继续使用与每个表一起保存的链接连接。因此,这两种形式或您的 VBA 代码都可以直接针对这些链接的表和视图工作。
但是,对于任何涉及多个表连接的 SQL 操作呢?然后,如前所述,如果这是已保存的 SQL 查询,则将该 SQL 移至 SQL 视图,然后从 Access 链接到该视图。如果这是 VBA 代码,那么此类代码可以继续针对该链接的视图或表进行操作,并为该链接的表/视图使用现有的内置配置字符串。