2016-08-13 4 views
0

Я пытаюсь создать универсальную функцию для возврата открытого соединения. Однако код ошибки вызывается в последней строке, когда я устанавливаю функцию в объект соединения. Нужны некоторые направления, чтобы добиться этого. Спасибо!Открытие соединения ADODB из Excel - Ошибка 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 только потому, что у него есть 1 строка меньше кодов ... спасибо за все помощь! – AiRiFiEd

ответ

3

Открытый метод объекта Connection не возвращает объект. Поэтому не стоит устанавливать что-то 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

эй hst! Спасибо, что помогли с кодом! Могу я просто проверить, есть ли разница между использованием свойства и тем, что предложил Yow? как с точки зрения надежности и т. д.? Извините за беспокойство! – AiRiFiEd

+0

Не должно быть разницы между использованием предложения Yow и ADODB.Connection.ConnectionString. Его предпочтение - для меня его легче читать. Что касается уверенности в себе, им не известно о каких-либо различиях, может быть, кто-то, у кого больше опыта, меня исправит. – hstdggsdtgsdafssarf456

Смежные вопросы