3

私は最近、大規模なAccess VBA/SQL Serverアプリケーションで別のプログラマと作業を開始しました。各関数には同じADODB接続があり、スペースを節約するために毎回呼び出すことができる単一の関数でそれらを置換しようとしています。ここでは関数は次のとおりです。VBAの関数からADODB.Connectionを返すにはどうすればよいですか?

Public Function ConnectionString() As ADODB.Connection 
Dim CN As ADODB.Connection 

Set CN = New ADODB.Connection 

With CN 
    .Provider = "Microsoft.Access.OLEDB.10.0" 
    .Properties("Data Provider").Value = "SQLOLEDB" 
    .Properties("Data Source").Value = DLookup("Source", "tbl_Connection") 
    .Properties("Initial Catalog").Value = DLookup("Catalog", "tbl_Connection") 
    .Properties("Integrated Security").Value = SSPI 
    .Open 
End With 

ConnectionString = CN 

End Function 

これはその接続を返すべきであるように思えるが、その代わりに、我々はエラーメッセージを取得:

User-Defined Function not found

ライン上

ConnectionString = CN

を私は間違って何をしていますか?それは同じADODB接続とにかく常にだ場合は、変数に保存して、そこから「リサイクル」することができ、

Set ConnectionString = CN 

プラス、そう:

答えて

3

あなたはSetに戻り値を必要とします接続の実際の作成はちょうど1回(ConnectionString関数が初めて呼び出されたとき)に発生します。

Private CN As ADODB.Connection 'variable in the module - NOT in the function 

Public Function ConnectionString() As ADODB.Connection 

If CN Is Nothing Then 

    Set CN = New ADODB.Connection 

    With CN 
     'do stuff 
    End With 

End If 

Set ConnectionString = CN 

End Function 
+0

これは機能しました。そのような簡単な解決策。それを試してみましたが、私はまだこれでかなり新しいです。 – SaintWacko