Pregunta

Estoy creando 2 informes en una hoja usando Excel Macro. Los informes se conectan a Oracle DB para sacar los datos. Tengo la cadena de conexión que tire de los datos y funciona bien. Lo que estoy tratando de hacer es mover la cadena de conexión a una función y pasarla al informe correspondiente según la entrada del usuario. Aquí hay un flujo de alto nivel: 1. El usuario hace clic en un botón de menú. En el fondo, intenta conectarse a DB. 2. Si la conexión es exitosa, abre un formulario con 2 botones (que informan que el usuario quiere ejecutar). Botón A y Botón B 3. Supongamos que el botón de clics de usuario se debe ejecutar y mostrar el informe.

El problema que estoy enfrentando está en el paso 2. Por alguna razón, no puedo pasar los parámetros de conexión a la función de botón.

A continuación se muestra el fragmento del código sobre cómo estoy tratando de conectarme con el DB. Necesita ayuda sobre cómo pasar los parámetros de conexión al botón una función.

Código para conectar 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

en el formulario del generador de informes que pasan los parámetros de fecha a la función

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

Necesito pasar los parámetros de conexión a la función CallReportGenerator.

cualquier puntero será útil.

¿Fue útil?

Solución

Hay múltiples fue que puede hacer esto:

Opción 1: Use una variable global

Si declara una variable como Global en la parte superior de un módulo, es decir, antes de cualquier subs / funciones, puede acceder a ellos desde cualquier otro módulo:

Ejemplo - 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

Forma:

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

Opción 2: Pase la variable a una variable de forma local

Declare una variable de módulo amplia en el módulo del formulario (es decir, donde coloque el otro código del formulario).Luego, proporcione un pequeño submerador que asigne el valor.

Ejemplo - 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

Forma:

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

Otros consejos

Declarar la conexión y el conjunto de registros en la parte superior del módulo estándar, fuera de cualquier procedimiento y configure a sus accesores al público.

Recuerde limpiar los recursos después de haber terminado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top