2016-08-13 15 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の応答から括弧を削除する必要があります)。そして、私は個人的に1行少ないコードしか持たないので、私は個人的に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

ここで、部分的にYowE3Kによって回答に基づいてのConnectionString properityを使用して、その上の私の感想です。

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

関連する問題