Comment transmettre les paramètres de connexion entre les modules dans une macro Excel
Question
Je crée 2 rapports sur une seule feuille à l'aide d'une macro Excel.Les rapports se connectent à Oracle DB pour extraire les données.J'ai la chaîne de connexion qui extrait les données et cela fonctionne bien.Ce que j'essaie de faire, c'est de déplacer la chaîne de connexion vers une fonction et de la transmettre au rapport correspondant en fonction de la saisie de l'utilisateur.Voici un flux de haut niveau :1.L'utilisateur clique sur un bouton de menu.En arrière-plan, il essaie de se connecter à DB.2.Si la connexion réussit, il ouvre un formulaire avec 2 boutons (quel rapport l'utilisateur souhaite exécuter).Bouton A et bouton B 3.Supposons que l'utilisateur clique sur le bouton A, le rapport doit être exécuté et affiché.
Le problème auquel je suis confronté se situe à l'étape 2.Pour une raison quelconque, je ne parviens pas à transmettre les paramètres de connexion à la fonction du bouton A.
Vous trouverez ci-dessous l'extrait de code expliquant comment j'essaie de me connecter au dB.J'ai besoin d'aide pour savoir comment transmettre les paramètres de connexion à la fonction du bouton A.
Code de connexion à la base de données
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
Dans le formulaire Générateur de rapport en passant les paramètres de date à la fonction
Private Sub Login_Click()
Call ReportGenerator(FromDate.Value, ToDate.Value)
End Sub
Je dois transmettre les paramètres de connexion à la fonction CallReportGenerator.
Tous les indicateurs seront utiles.
La solution
Il y en a plusieurs où vous pouvez faire ceci :
Option 1:Utiliser une variable globale
Si vous déclarez une variable comme Global
sur le dessus d'un module, c'est-à-direavant tout sous/fonction, vous pouvez y accéder depuis n'importe quel autre module :
Exemple - 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
Formulaire:
Private Sub CreateReport()
dbConnect.Open gStrConnection
...
End Sub
Option 2:Passer la variable à une variable de formulaire locale
Déclarez une variable à l'échelle du module dans le module du formulaire (c'est-à-direoù vous placez l'autre code du formulaire).Ensuite, fournissez un petit sous-setter qui attribue la valeur.
Exemple - 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
Formulaire:
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
Autres conseils
Déclarez la connexion et le jeu d'enregistrements en haut du module standard, en dehors des procédures et définir leurs accesseurs au public.
N'oubliez pas de nettoyer les ressources après votre fin.