2016-08-13 82 views
0

我正在尝试创建一个通用函数来返回打开的连接。 但是,当我将函数设置为连接对象时,代码在最后一行发生错误。需要一些方向才能实现这一目标。谢谢!从Excel打开ADODB连接 - 错误424

'' 
' Function to open an ADODB connection and return the connection object 
' @param strDBPath string containing full path to database of interest 
' @param strUserID optional string containing user name to use when establishing the connection (default: vbNullString) 
' @param strPassword optional string containing password to use when establishing the connection (default: vbNullString) 
' @param intOptionsEnum optional integer to open the connection synchronously (-1) (defualt) - 16 to open connection asynchronously 
' @return Object containing opened ADODB connection 
' @remarks Have only tested this on .mdb database (not .accdb) 
Public Function vfnc_StartConnection(_ 
    strDBPath As String, _ 
    Optional strUserID As String = vbNullString, _ 
    Optional strPassword As String = vbNullString, _ 
    Optional intOptionsEnum As Integer = -1 _ 
    ) As Object 

    Dim objConn As Object: Set objConn = CreateObject("ADODB.connection") 
    Dim strDataSource As String: strDataSource = "Data Source=" & strDBPath & ";" 
    '#If VB7 And Win64 Then 
     strProvider = "Provider=Microsoft.ACE.OLEDB.12.0; " 
    '#Else 
     'strProvider = "Provider=Microsoft.Jet.OLEDB.4.0; " 
    '#End If 
    Set vfnc_StartConnection = objConn.Open(strProvider & strDataSource, strUserID, strPassword, intOptionsEnum) 'Error occurs here 
End Function 
+0

什么是错误信息? –

+0

嘿错误是424对象所需!谢谢! – AiRiFiEd

+0

大家好!感谢所有的帮助!为了完整起见,hstdggsdtgsdafssarf456和YowE3K的方法都有效(除了我必须从Yow的回复中删除括号),并且我个人会使用Yow的方法,因为它只有一行代码...感谢所有人帮助! – AiRiFiEd

回答

3

Connection对象的Open方法不返回对象。因此,设置objConn.Open是不合适的。

你可能只是想返回打开objConn对象本身,即

'Open the connection 
    objConn.Open strProvider & strDataSource, strUserID, strPassword, intOptionsEnum 

    'Now that the connection has been opened, return the connection to the calling routine 
    Set vfnc_StartConnection = objConn 
+0

嘿,谢谢你的帮助!让我试试你上面提到的方法! – AiRiFiEd

3

这是我对的是,使用的ConnectionString properity,通过YowE3K部分基于答案。

Public Function vfnc_StartConnection(strDBPath As String, Optional strUserID As String = "admin", Optional strPassword As String = vbNullString, Optional intOptionsEnum As Integer = -1) As ADODB.Connection 

    Dim objConn As ADODB.Connection 
    Set objConn = New ADODB.Connection 

    Dim strDataSource As String 
    Dim strprovider As String 
    strDataSource = "Data Source=" & strDBPath & ";" 
    strprovider = "Provider=Microsoft.ACE.OLEDB.12.0; " 

    objConn.ConnectionString = strprovider & strDataSource & ";User ID=" & strUserID & ";Password=" & strPassword & ";" 
    objConn.Open 

    Set vfnc_StartConnection = objConn 
End Function 
+0

hey hst!感谢您对代码的帮助!我可以检查一下使用该房产与Yow建议的区别吗?像健壮性等方面?很抱歉打扰! – AiRiFiEd

+0

使用Yow的建议和ADODB.Connection.ConnectionString本质应该没有区别。它的偏好 - 对我来说更容易阅读。就稳健性而言,我没有意识到任何差异,也许有更多经验的人会纠正我。 – hstdggsdtgsdafssarf456