SQL Server 到 MS Access 到 VBA ADOdb,我需要更改提供程序吗?

问题描述 投票:0回答:1

我需要有关将 ADOdb 与 MS Access 前端和 SQL 后端一起使用的帮助和指导。也许是一个很好的指导视频。

我在 MS Access 中使用 ADOdb 已有 15 年了,现在我刚刚迁移到 SQL Server。请参阅附图。

Picture of Data Flow and connections

迁移后,我的一些代码可以正常工作,但也存在问题。
我的主要问题是我的 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
sql-server ms-access oledb adodb
1个回答
0
投票

打开+使用链接表的现有 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 代码,那么此类代码可以继续针对该链接的视图或表进行操作,并为该链接的表/视图使用现有的内置配置字符串。

© www.soinside.com 2019 - 2024. All rights reserved.