IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Fonction connexion à une base mysql via vba [AC-2010]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut Fonction connexion à une base mysql via vba
    bonjour,
    J'ai une base de données access 2010 et je me connecte sur mon serveur sql en vba sans passer par des tables liées.
    J'ai testé mon code sur un formulaire et voici le code qui est exécuté sur l'événement form_load:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    ' -- déclarations
    Dim con As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim strSQL As String
    strSQL = "TD_USER"
     
    '-- Connexion à la base de données
    con.CursorLocation = adUseClient
    con.Open "Provider=MSDASQL;" & _
    "Driver={MySQL ODBC 5.3.2 Driver};" & _
    "Server=adresseIP;" & _
    "Data Source=NomliaisonODBC;" & _
    "Port=3306;" & _
    "Database=NomBaseDeDonnee;" & _
    "User=NomUser;" & _
    "Password=MotDePasse;" & _
    "Option=16426 "
     
    '-- Ouverture de la table TD_USER
    rst.Open strSQL, con, adOpenDynamic, adLockOptimistic
     
    '-- Affichage des données sur le formulaire
    Me.txt_prenom = rst.Fields(3)
    Me.txt_nom = rst.Fields(4)
    Au chargement du formulaire, la connexion marche bien et les infos (prénom et nom) affichées dans les zones de texte (txt_prenom et txt_nom).
    J'aimerais faire une fonction publique que j’appellerais pour chaque formulaire afin d'afficher les jeux de données désiré.
    Quelqu'un pourrait-il m'aidé
    Par avance, je vous remercie

  2. #2
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonjour,

    Tu peux mettre ton code dans une Sub dont les arguments sont passés par référence plutôt que par valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub ObtenirInfosUtilisateur(ByRef sNom As String, ByRef sPrenom As String)
    ' -- déclarations
    Dim con As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim strSQL As String
    strSQL = "TD_USER"
     
    '-- Connexion à la base de données
    con.CursorLocation = adUseClient
    con.Open "Provider=MSDASQL;" & _
    "Driver={MySQL ODBC 5.3.2 Driver};" & _
    "Server=adresseIP;" & _
    "Data Source=NomliaisonODBC;" & _
    "Port=3306;" & _
    "Database=NomBaseDeDonnee;" & _
    "User=NomUser;" & _
    "Password=MotDePasse;" & _
    "Option=16426 "
     
    '-- Ouverture de la table TD_USER
    rst.Open strSQL, con, adOpenDynamic, adLockOptimistic
     
    '-- Affecter le contenu des champs aux variables 'ByRef'
    If Not rst.EOF Then
       sNom = rst.Fields(3)
       sPrenom = rst.Fields(4)
    End If
     
    '-- Fermer et libérer les objets
    rst.close
    set rst = Nothing
    con.close
    set con = Nothing
    End Sub
    Utilisation dans un formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim sNom As String, sPrenom as String
     
    '-- Obtenir les données Nom, Prénom
    ObtenirInfosUtilisateur sNom, sPrenom
     
    '-- Affichage des données sur le formulaire
    Me.txt_prenom = sNom
    Me.txt_nom = sPrenom
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut
    bonjour et merci pour votre réponse.
    Je voulais plutôt faire :
    (1) une Public Function pour définir la connexion à la base de données mysql
    (2) dans un formulaire (user par exemple) que je fasse appel à la function pour avoir la connection à la base et ouvrir mon recordset.
    Cordialement,

  4. #4
    Expert confirmé
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Par défaut
    Bonsoir,

    Sous réserve d'avoir bien compris cette fois-ci, voila ce que je ferai.
    Dans un module de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Option Compare Database
    Option Explicit
     
    Public con As ADODB.Connection
     
    Function OuvrirConnexionMySsql() As Object
    Dim bCnOk As Boolean
     
    On Error GoTo ErrH01
     
    ' On suppose par défaut que la connexion est établie
    bCnOk = True
    ' Vérifier si la connexion est active
    bCnOk = (con.State = adStateOpen)
    ' Si elle n'est pas active, libérer l'objet
    If (Not bCnOk) Then Set con = Nothing
     
    On Error GoTo ErrH
    ' Etablir la connexion si besoin
    If (Not bCnOk) Then
        ' Créer l'objet
        Set con = New ADODB.Connection
        ' Etablir la connexion
        con.CursorLocation = adUseClient
        con.Open "Provider=MSDASQL;" & _
        "Driver={MySQL ODBC 5.3.2 Driver};" & _
        "Server=adresseIP;" & _
        "Data Source=NomliaisonODBC;" & _
        "Port=3306;" & _
        "Database=NomBaseDeDonnee;" & _
        "User=NomUser;" & _
        "Password=MotDePasse;" & _
        "Option=16426 "
    End If
     
    ExitFn:
        ' Retourner l'objet con
        Set OuvrirConnexionMySsql = con
        Exit Function
     
    ErrH01:
        bCnOk = False
        Resume Next
     
    ErrH:
        Set con = Nothing
        MsgBox "Erreur No." & Err.Number & " : " & Err.Description, vbCritical
        Resume ExitFn
     
    End Function
     
    Function FermerConnexionMySql()
     
    On Error GoTo ErrH
     
    ' Si la connexion est un objet initialisé
    If Not (con Is Nothing) Then
        ' Fermer la connexion
        If con.State <> adStateClosed Then
           con.Close
        End If
    End If
     
    ExitFn:
        ' Libérer l'objet
        Set con = Nothing
        Exit Function
     
    ErrH:
        Resume ExitFn
    End Function
    On a une variable objet globale con qui est ouverte par la fonction OuvrirConnexionMySsql et fermée par la fonction FermerConnexionMySql.

    On peut au choix ...
    • Utiliser OuvrirConnexionMySsql puis ensuite se servir de la variable objet con
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      OuvrirConnexionMySsql
      If Not (con Is Nothing) Then
          ' Ok, con est bien initialisée
      End If
    • Ou bien utiliser une variable objet locale qui sera initialisée par la valeur de retour de la fonction OuvrirConnexionMySsql.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      Dim oMaCnLocale As ADODB.Connection
       
      Set oMaCnLocale = OuvrirConnexionMySsql()
       
      If Not (oMaCnLocale Is Nothing) Then
         ' Ok, oMaCnLocale est bien initialisée
      End If

    J'ai plus ou moins optimisé OuvrirConnexionMySsql pour qu'on puisse l'appeler même si la connexion est déjà ouverte.
    On peut donc, par précaution, l'appeler chaque fois qu'on va avoir besoin de la connexion au serveur MySql.

    Quand on a plus besoin de la connexion, on la ferme en appelant FermerConnexionMySql.

    A+

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut
    Bonjour LedZeppII,
    Vous avez bien compris ce dont j'avais besoins.
    Je viens de tester votre proposition de code et ça marche bien.
    Un grand Merci à vous!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Connexion a une base mysql via odbc
    Par taspai dans le forum VB.NET
    Réponses: 18
    Dernier message: 08/04/2014, 18h14
  2. [XL-2010] Connexion à une base Access via VBA Excel
    Par Alaedjens dans le forum Excel
    Réponses: 2
    Dernier message: 17/01/2014, 10h57
  3. Réponses: 4
    Dernier message: 16/04/2009, 09h46
  4. Connexion à une base MySQL via une Servlet
    Par maxinformatique dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 25/05/2007, 15h18
  5. Connexion à une base SQL_Serve via Internet
    Par Yoann_D dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 22/07/2003, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo