質問

Excelマクロを使用して1枚のレポートを作成しています。レポートは、データをプルするためにOracle DBに接続します。私はデータを引っ張る接続文字列を持っています、そしてそれはうまく機能します。接続しようとしているのは、接続文字列を関数に移動し、ユーザー入力に基づいてそれぞれのレポートに渡します。これがハイレベルのフローです。 1.ユーザーがメニューボタンをクリックします。バックグラウンドではDBに接続しようとします。 2.接続が成功した場合は、2つのボタン(ユーザーが実行したい)のフォームを開きます。ボタンAとボタンB 3.ボタンをクリックすると、レポートを実行して表示するとします。

私が直面している問題はステップ2にあります。何らかの理由で、私は接続パラメータを関数のボタンに渡すことができません。

下記は、DBに接続しようとしている方法に関するコードのスニペットです。接続パラメータをボタンA関数に合格する方法についての助けが必要です。

db

に接続するためのコード
       Dim dbConnect As ADODB.Connection
       Dim GetData As ADODB.Recordset

       'Declare a set of variables to hold the username and password for the database
       Dim strUserName As String
       Dim strPassword As String
       Dim strDatabase As String
       Set GetData = New ADODB.Recordset
      '***

   On Error Resume Next


      Set dbConnect = New ADODB.Connection

      dbConnect.Open ( _
    "User ID=" & strUserName & "; Password=" & strPassword & "; Data Source=" & strDatabase & "; Provider=msdaora")

      'If the username or password is incorrect throw an error message
      If (dbConnect.State <> 1) Or (Err <> 0) Then
       intResult = MsgBox("Could not connect to the database.  Check your user name and password." & vbCrLf & Error(Err), 16, " ")
    Else
      '.ConnectionString = dbConnect
      ReportGenerator.Show ' this opens up another form where 
                           '  user can input the dates.
                           'This is turn calls the actual code...
      End If

      End Sub
.

レポートジェネレータのフォームには、日付パラメータを関数に渡す

Private Sub Login_Click()
    Call ReportGenerator(FromDate.Value, ToDate.Value)
End Sub
.

CallReportGenerator関数に接続パラメータを渡す必要があります。

任意のポインターは役立ちます。

役に立ちましたか?

解決

これを行うことができる複数のものがありました:

オプション1:グローバル変数を使用する

モジュールの上部にあるGlobalとして変数を宣言した場合、副/関数の前に、他のモジュールからアクセスできます。

例 - MODULE1:

Option Explicit

Global gStrConnection As String 'g for Global scope

Sub Connect()
    gStrConnection = "User ID=" & strUserName & "; Password=" & strPassword & "; Data Source=" & strDatabase & "; Provider=msdaora")    
   dbConnect.Open gStrConnection
   ...
End Sub
.

フォーム:

Private Sub CreateReport()
    dbConnect.Open gStrConnection
    ...
End Sub
.

オプション2:変数をローカルフォーム変数に渡す

フォームのモジュールでモジュール全体の変数を宣言します(すなわち、フォームの他のコードを配置する場所)。その後、値を割り当てる小さな設定副字を入力します。

例 - MODULE1:

Option Explicit

Sub Connect()
    Dim strConnection as String
    strConnection = "User ID=" & strUserName & "; Password=" & strPassword & "; Data Source=" & strDatabase & "; Provider=msdaora")    
   dbConnect.Open strConnection
   ...
    ReportGenerator.StoreConnectionString strConnection
    ReportGenerator.Show
    ...
End Sub
.

フォーム:

Private mStrConnection as String 'm for module-wide scope

Public Sub StoreConnectionString(strConnection as String)
    mStrConnection = strconnection
End Sub

Private Sub CreateReport()
    dbConnect.Open mStrConnection
    ...
    ...
End Sub
.

他のヒント

標準モジュールの上部にある接続とレコードセットを宣言し、手順の外部で、アクセサをパブリックに設定します。

終了後にリソースをクリーンアップすることを忘れないでください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top