使用 OleDb 从 Access Forms 连接到 SQL Server

Posted

技术标签:

【中文标题】使用 OleDb 从 Access Forms 连接到 SQL Server【英文标题】:Connecting to SQL Sever From Access Forms Using OleDb 【发布时间】:2017-03-07 15:30:41 【问题描述】:

我正在开展一个将 Microsoft Access 后端迁移到 SQL Server 后端的项目,我的客户坚持使用 Access 创建表单来执行任何插入、更新和删除操作。问题是他的机器上有 SQL 数据工具,而他团队中的其他人(没有数据工具)也需要能够使用这些表单。我认为解决此问题的最佳方法是使用和 OleDb 连接,通过访问连接到表单,以便他的团队可以使用它,而我的访问知识非常有限。到目前为止,我所拥有的只是下面的内容

“Driver=SQLOLEDB;Data Source=SomeServer;Initial Catalog=SomeDatabase;Integrated Security=SSPI”

我知道用户对 SQL 框有信任,并且可以通过 ODBC 连接。我们只是无法让 OleDb 正常工作。非常感谢任何有关如何在访问表单中部署 OleDB 连接的帮助。

【问题讨论】:

我不明白你的问题。 “在 Access 表单中部署 OleDB 连接”是什么意思?你有代码给我们看吗?什么不工作? 我所有的代码都是我包含的。由于能力,客户无法使用程序化解决方案。我根本不熟悉访问权限,并且有一种方法可以建立从访问权限到 SQL Server 的连接,我全神贯注。我的问题是我们尝试过的一切都不起作用或出现错误。诸如找不到连接文件之类的东西。 【参考方案1】:

这是我们用于 SQL Server 的连接。它支持使用受信任的连接或 SQL Server 身份验证。

Call GetConnection(gvstr_SQLServer_Name, gvstr_SQLServer_Database, _
        cnConn, adUseServer, False, False)

    If GetConnection(gvstr_SQLServer_Name, gvstr_SQLServer_Database, _
            gv_DBS_SQLServer, adUseServer, True, False) = True Then
        gvbln_UsingSQLServer = True
        DoCmd.Hourglass True
        ReLink_SQLSERVER_Tables
    Else
        gvbln_UsingSQLServer = False
    End If



Public Function GetConnection(ByVal strDSN As String, _
    ByVal strDatabase As String, _
    ByRef cnLocal As ADODB.Connection, _
    ByVal CursorLoc As CursorLocationEnum, _
    ByVal UsePassword As Boolean, _
    ByVal blnTrusted As Boolean) As Boolean

Dim intWaitDuration     As Integer
Dim strConnectString    As String
Dim strDisplay          As String

Const CURRENT_METHOD As String = "GetConnection"
On Error GoTo ERROR_HANDLER
GetConnection = False
intWaitDuration = 60     
Retry_Connection:
If cnLocal Is Nothing Then Set cnLocal = New ADODB.Connection
If cnLocal.State = adStateOpen Then
        Write_To_Log "Connection already open -- -will not reopen!!"
    GetConnection = True
    GoTo Proc_Exit
End If

With cnLocal
    Debug.Print "Use TRUSTED CONNECTION (ABOVE)"
    If gvstr_Workstation = "my-pc" Then
        strConnectString = "Driver=SQL Server;" & _
                                "Server=" & strDSN & ";" & _
                                "Database=" & strDatabase & ";" & _
                                "Trusted_Connection=yes"
    Else
        If blnTrusted = True Then
            strConnectString = "Driver=SQL Server;" & _
                                "Server=" & strDSN & ";" & _
                                "Database=" & strDatabase & ";" & _
                                "Trusted_Connection=yes"
        Else
             strConnectString = "Driver=SQL Server;" & _
                                "Server=" & strDSN & ";" & _
                                "Database=" & strDatabase & ";" & _
                                "User Id=Sql_myuid;Password=ppppp"

            strDisplay = "Driver=SQL Server;" & _
                                "Server=" & strDSN & ";" & _
                                "Database=" & strDatabase & ";" & _
                                "User Id=S*********t;Password=****************"

        End If
    End If
     Write_To_Log "Will use Conn String: " & strDisplay
    .ConnectionString = strConnectString
    .CursorLocation = CursorLoc
    .Open
End With
GetConnection = True
Proc_Exit:
Exit Function

ERROR_HANDLER:
Debug.Print Err.Number & vbCrLf & Err.Description

Err.Source = "Module_Utilities: GetConnection  at Line: " & Erl
DocAndShowError
Resume Proc_Exit
Resume Next
Resume
End Function

【讨论】:

我需要在哪里添加它才能让它工作?我是否需要更改代码中没有看到任何变量的任何内容? 抱歉,如果您使用我展示的第一条指令调用该函数,则 TRUSTED CONNECTION 的值如下所示: Call GetConnection("PROD_0001", "mysqlDAtabase", _ cnConn, adUseServer, False, True) 或者像 SQL Server 身份验证这样:调用 GetConnection("PROD_0001", "MySQLDAtabase", _ cnConn, adUseServer, True, False) 谢谢,我将在以后的应用程序中使用它。此实例需要非编程解决方案。

以上是关于使用 OleDb 从 Access Forms 连接到 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

OLEDB 使用 DSN 连接到 Access 数据库

Access 2013 的 OleDb 连接字符串是啥?

使用 Microsoft.Jet.OLEDB.4.0 从 C# 将行插入 Access db,自动编号列设置为零

Access环境下使用PowerShell执行SQL命令

使用 DEFAULT 值和 OleDB 时如何终止 SQL 语句?

如何使用c#连接到access 2007