Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从Excel打开ADODB连接-错误424_Vba_Excel_Ms Access - Fatal编程技术网

Vba 从Excel打开ADODB连接-错误424

Vba 从Excel打开ADODB连接-错误424,vba,excel,ms-access,Vba,Excel,Ms Access,我试图创建一个泛型函数来返回打开的连接。 但是,当我将函数设置为connection对象时,代码在最后一行出现错误。需要一些指导才能让这一切顺利进行。谢谢大家! '' ' Function to open an ADODB connection and return the connection object ' @param strDBPath string containing full path to database of interest ' @param strUserI

我试图创建一个泛型函数来返回打开的连接。 但是,当我将函数设置为connection对象时,代码在最后一行出现错误。需要一些指导才能让这一切顺利进行。谢谢大家!

''
' 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

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

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

下面是我的看法,使用ConnectionString属性,部分基于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

下面是我的看法,使用ConnectionString属性,部分基于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

错误信息是什么?嘿,需要424对象!谢谢大家好!谢谢你的帮助!为完整起见:HSTDGGSDGTGSDAFSSARF456和YowE3K的方法都能工作(除了我必须从Yow的回复中删除括号),我个人会使用Yow的方法,因为它的代码少了1行……感谢所有的帮助!我总是忘记函数调用需要方括号,而子例程调用不需要方括号-我已经更正了答案中的代码,因此该页面的未来读者也不必阅读所有注释。错误消息是什么?嘿,需要424对象!谢谢大家好!谢谢你的帮助!为完整起见:HSTDGGSDGTGSDAFSSARF456和YowE3K的方法都能工作(除了我必须从Yow的回复中删除括号),我个人会使用Yow的方法,因为它的代码少了1行……感谢所有的帮助!我总是忘记函数调用需要方括号,子例程调用不需要方括号-我已经更正了答案中的代码,这样将来的读者就不必阅读所有的注释了。嘿,谢谢你的帮助!让我用上面提到的方法试试你的方法!嘿,谢谢你的帮助!让我用上面提到的方法试试你的方法!嘿,hst!感谢您对代码的帮助!我可以检查一下使用该物业与您的建议是否有区别吗?比如在健壮性等方面?抱歉打扰了!使用Yow的建议和ADODB.Connection.ConnectionString属性之间应该没有区别。这是我的一个偏好——对我来说更容易阅读。就健壮性而言,我不知道有什么不同,也许有经验的人会纠正我。嘿,hst!感谢您对代码的帮助!我可以检查一下使用该物业与您的建议是否有区别吗?比如在健壮性等方面?抱歉打扰了!使用Yow的建议和ADODB.Connection.ConnectionString属性之间应该没有区别。这是我的偏好,对我来说更容易阅读。就健壮性而言,我不知道有什么不同,也许有经验的人会纠正我。