我正在使用Excel宏在一张纸上创建2个报告。报告连接到Oracle DB以提取数据。我有一个连接字符串,可以拉动数据,它工作正常。我正在尝试做的是将连接字符串移动到一个函数,并根据用户输入将其传递给各个报告。这是一个高水平的流量: 1.用户点击菜单按钮。在后台,它试图连接到DB。 2.如果连接成功,它会打开一个带有2个按钮的表单(向用户报告用户运行)。按钮a和按钮b 3.假设用户单击按钮应执行并显示报告。

我面临的问题在步骤2中。出于某种原因,我无法将连接参数传递给按钮函数。

下面是关于我如何尝试连接到DB的代码的片段。需要帮助如何将连接参数传递到按钮函数。

用于连接到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 Sub。

示例 - 模块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