0

MS Access データベースに接続するために、次のサブルーチンをセットアップしました。

Public Sub MakeDBConnection(ByVal source As String)
    Try
        cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";")
        cn.Open()
    Catch e As Exception
        ReportError("CRITICAL", e.Message)
    End Try
End Sub

それはモジュール内にあり、それが動作するモジュール内でそれを使用する関数はありますが、Main.vb(私のメインフォーム) からそれを使用しようとすると、SQL クエリを実行しようとすると何もしないようです。接続を初期化する必要があるというエラーが返されます。

使用するすべての変数をパブリックに設定しようとしましたが、機能しません。多分私は何かを返す必要がありますか?知らない。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

0

問題は、変数 cn のスコープが Sub に対してローカルであることです。これを関数に変更し、OleDbConnection オブジェクトを返す必要があります。したがって、コードは次のようになります。

Public Function MakeDBConnection(ByVal source As String) As OleDbConnection
    Try
        Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & source & ";")
        cn.Open()

        Return cn

    Catch e As Exception
        ReportError("CRITICAL", e.Message)
    End Try
End Function

呼び出しコードは次のようになります。

' For example:
myOleDbCommand.Connection = MakeDBConnection(source)

また、アーキテクチャに適合する場合は、データ ソースの app.config ファイルから MakeDBConnection 関数を読み取ることも検討してください。

于 2010-01-26T22:28:02.620 に答える