문제

Excel 매크로를 사용하여 한 시트에 2개의 보고서를 작성하고 있습니다.보고서는 Oracle DB에 연결하여 데이터를 가져옵니다.데이터를 가져오는 연결 문자열이 있는데 제대로 작동합니다.내가 하려는 작업은 연결 문자열을 함수로 이동하고 이를 사용자 입력에 따라 해당 보고서에 전달하는 것입니다.다음은 높은 수준의 흐름입니다.1.사용자가 메뉴 버튼을 클릭합니다.백그라운드에서 DB에 연결을 시도합니다.2.연결이 성공하면 2개의 버튼(사용자가 실행하려는 보고서)이 있는 양식이 열립니다.버튼 A 및 버튼 B 3.사용자가 버튼 A를 클릭한다고 가정하면 보고서가 실행되고 표시되어야 합니다.

제가 겪고 있는 문제는 2단계에 있습니다.어떤 이유로 연결 매개변수를 버튼 A 기능에 전달할 수 없습니다.

다음은 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 모듈 상단에, 즉하위/함수 이전에 다른 모듈에서 액세스할 수 있습니다.

예 - 모듈1:

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:변수를 로컬 양식 변수에 전달

양식의 모듈에서 모듈 전체 변수를 선언합니다(예:양식의 다른 코드를 배치하는 위치).그런 다음 값을 할당하는 작은 setter 하위를 제공합니다.

예 - 모듈1:

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