Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA Excel] Accéder à une Database SQL

Sujet résolu
    22 avril 2021 à 12:58:18

    Je ne m'y connais pas des masses en VBA mais je souhaite me transférer des données à un serveur web ('mais pour commencer un serveur local') via un code vba sur Excel mais cela ne fonctionne pas et m'affiche toujours le même problème "erreur de compilation : instruction incorrect à l'intérieur d'une procédure". J'ai déjà installer express et MySQL manager et je ne sais pas quoi faire d'autre. Voici mon code: 

       Dim source As String, location As String, user As String, password As String
        source = "MySQL"
        location = "localhost"
        user = "root"
        password = ""
        database = "monsite"
        mysql_driver = "MySQL ODBC 5.2 ANSI Driver"
    
        'Build the connection string
        Dim connectionString As String
    
        connectionString = "Driver={" & mysql_driver & "};Server=" & location & ";Database=" & database & ";UID=" & user & ";PWD=" & password & ""
    
        'Create and open a new connection to the selected source
        Set OpenConnection = New ADODB.Connection
        OpenConnection.CursorLocation = adUseClient
        Call OpenConnection.Open(connectionString)
    End Function

    -
    Edité par AbcAbc6 23 avril 2021 à 19:12:59

    • Partager sur Facebook
    • Partager sur Twitter
      22 avril 2021 à 14:44:21

      Bonjour,

      Le message qui suit est une réponse automatique activée par un membre de l'équipe. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
      Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

      Pour plus d'informations, nous vous invitons à lire les règles générales du forum

      Merci de colorer votre code à l'aide du bouton Code

      Les forums d'Openclassrooms disposent d'une fonctionnalité permettant de colorer et mettre en forme les codes source afin de les rendre plus lisibles et faciles à manipuler par les intervenants. Pour cela, il faut utiliser le bouton Code de l'éditeur, choisir un des langages proposés et coller votre code dans la zone prévue. Si vous utilisez l'éditeur de messages en mode Markdown, il faut utiliser les balises <pre class="brush: vb;">Votre code ici</pre>.

      Merci de modifier votre message d'origine en fonction.

      Liens conseillés

      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2021 à 14:54:44

        arf j'avais répondu sur l'autre sujet mais il a fermé le temps que j'écrive et valide ma réponse :o 

        Si tu n'as pas oublié de lignes dans ton code actuel, il manque le début de la fonction (il y a un End Function, mais pas de Function nom(parametres) au début; tu as aussi une méthode vide à la fin (pas grave en soit)

        Tu n'as pas déclaré database et mysql_driver en tant que chaine (pas très grave non plus, mais comme tu as déclaré les autres, autant les déclarer aussi et prendre la bonne habitude de le faire (on peut rajouter au tout début du fichier Option Explicit pour obliger la déclaration des variables)

        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2021 à 15:09:10

          Alors voici le code modifié avec la macro associé mais aucun changement :( 

          Function Connection()
             Dim source As String, location As String, user As String, password As String, mysql_driver As String, database As String
             
              source = "MySQL"
              location = "localhost"
              user = "root"
              password = ""
              database = "monsite"
              mysql_driver = "MySQL ODBC 5.2 ANSI Driver"
          
              'Build the connection string
              Dim connectionString As String
          
              connectionString = "Driver={" & mysql_driver & "};Server=" & location & ";Database=" & database & ";UID=" & user & ";PWD=" & password & ""
          
              'Create and open a new connection to the selected source
              Set OpenConnection = New ADODB.Connection
              OpenConnection.CursorLocation = adUseClient
              Call OpenConnection.Open(connectionString)
          End Function
          
          
          
           
          Sub Macro1()
          '
          ' Macro1 Macro
          '
          
          '
          End Sub

          -
          Edité par LaventureEstivene 22 avril 2021 à 15:24:35

          • Partager sur Facebook
          • Partager sur Twitter
            22 avril 2021 à 16:04:19

            Dans quel sens pas de changement ? si un message d'erreur, lequel et sur quelle ligne ?

            il faut lancer la fonction Connection() pour que la connexion se fasse, mais ça ne fera qu'ouvrir la connexion.

            Ta macro1 n'exécute rien mais ce n'est pas grave si tu lances Connection() d'une autre façon; si tu veux la lancer dans macro1, il faut l'appeler (sic)

            Sub Macro1()
             connection
            End Sub

            En général, une fonction renvoie quelque chose (ici cela pourrait être la connexion via Set Connection=OpenConnection à la fin de la fonction

            • Partager sur Facebook
            • Partager sur Twitter
              22 avril 2021 à 18:42:37

              Je vois le message "Erreur d'exécution '-214767259(80004005)' - [Microsoft][Gestionnaire de pilot ODBC]Source de donnée introuvable et nom spécifié " La ligne surligné est :

              Call OpenConnection.Open(connectionString)


              Je me demande si c'est un problème de librairie, de plus je me demande comment exporter des données sur la database.

              • Partager sur Facebook
              • Partager sur Twitter
                23 avril 2021 à 10:47:47

                Bonjour,

                Je pense que le pilote n'est pas installé sur ta machine. Tu peux le télécharger sur cette page : https://dev.mysql.com/downloads/connector/odbc/. Tu peux l'installer via le MySQL Installer (c'est le produit "Connector/ODBC"), ou l'installer directement via un des liens sur la page.

                Assure-toi que la version du pilote installée correspond à la version indiquée dans la variable mysql_driver : actuellement, la dernière version du pilote est la 8.0, pas la 5.2.

                • Partager sur Facebook
                • Partager sur Twitter
                  23 avril 2021 à 11:48:00

                  est-ce que ta base est bien sur ton PC (localhost), que tu a une base nommée "monsite" (ou le nom correspondant si tu l'a changé pour le forum) et que le service MySQL est démarré ?

                  -
                  Edité par umfred 23 avril 2021 à 11:49:21

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 avril 2021 à 12:25:44

                    Alors Sarkas: Si tu parle de mysql-connector-odbc-8.0.24 je l'ai télécharger mais cela ne change rien ! le même message d'erreur et surlignage !

                    Et Umfred : Et oui la database de mon site web en local est monsite, j'utilise pour MySQL : Wamp, MySQL manager server studio et SQL server Configuration manager

                    -
                    Edité par LaventureEstivene 23 avril 2021 à 14:10:52

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 avril 2021 à 17:14:27

                      ça ne répond pas à la question de savoir si le service MySQL est bien démarré. si il n'est pas démarré (vérifier avec wamp server qui permet de lancer/arrêter les différents service (apache, mysql, etc)), pas de connexion possible car la base n'est pas visible/accessible.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 avril 2021 à 17:45:02

                        Tu as bien mis à jour la variable mysql_driver avec le numéro de version du pilote ?

                        mysql_driver = "MySQL ODBC 8.0 ANSI Driver"

                        Autre possibilité : je vois que tu as téléchargé la version 64 bits du pilote. Assure-toi que ta version de Microsoft Office est également en 64 bits.

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 avril 2021 à 18:31:18

                          Sarkas t'es le meilleur, un dieu parmi les hommes ! Plus de msg d'erreur  !

                          Mais comment faire pour vérifier la connexion avec un retour ?

                          -
                          Edité par LaventureEstivene 23 avril 2021 à 18:36:55

                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 avril 2021 à 19:15:23

                            Bonjour, j'ai modifié le titre de votre sujet, en effet la notion d'urgence n'est pas de mise sur ce forum. J'ai enlevé toute indication d'urgence dans le titre.

                            La modération.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              23 avril 2021 à 19:35:48

                              Ok mais tu sais comment comment faire un retour ? Parce que c'est urgent ! :D
                              • Partager sur Facebook
                              • Partager sur Twitter
                                24 avril 2021 à 14:13:42

                                Je ne suis pas certain de comprendre ta question. Si tu n'as aucune erreur, c'est que tu es connecté et tu peux maintenant ajouter du code pour exécuter des requêtes sur la base de données. Tu peux aussi vérifier l'état de la connexion en regardant la valeur de la propriété OpenConnection.State. Juste après avoir ouvert la connexion, elle devrait valoir 1 pour indiquer que la connexion est ouverte. Tu peux avoir plus d'informations à ce sujet dans la documentation : https://docs.microsoft.com/fr-fr/sql/ado/reference/ado-api/state-property-ado?view=sql-server-ver15.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 avril 2021 à 18:53:15

                                  Re Sarkas, alors j'ai rajouter du code afin d'avoir un retour de la variable OpenConnection.State et pour créer un base de donnée sur mon serveur local 

                                     OpenConnection.CursorLocation = adUseClient
                                      Call OpenConnection.Open(connectionString)
                                      MsgBox "Voila:" & OpenConnection.State
                                     Requete = " CREATE DATABASE IF NOT EXISTS `vbamysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
                                  Requete = "USE `vbamysql`;"
                                  Requete = "CREATE TABLE IF NOT EXISTS `voitures` ("
                                    Requete = "`id` INTEGER NOT NULL auto_increment,"
                                    Requete = "`marque` VARCHAR(25) NOT NULL,"
                                    Requete = "`modele` VARCHAR(25) NOT NULL ,"
                                    Requete = "`cv` INTEGER,"
                                    Requete = "PRIMARY KEY (`id`),"
                                    Requete = "UNIQUE (`modele`)"
                                  Requete = ") ENGINE = InnoDB ;"
                                      End Function

                                  ou

                                      Call OpenConnection.Open(connectionString)
                                      MsgBox "Voila:" & OpenConnection.State
                                      Requete = " CREATE DATABASE IF NOT EXISTS `vbamysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `vbamysql`;CREATE TABLE IF NOT EXISTS `voitures` (`id` INTEGER NOT NULL auto_increment,`marque` VARCHAR(25) NOT NULL,`modele` VARCHAR(25) NOT NULL ,`cv` INTEGER,PRIMARY KEY (`id`),UNIQUE (`modele`)) ENGINE = InnoDB ;"
                                  End Function

                                  Si j'ai bien un retour de ma variable , je n'ai aucune database de construite. Pourtant le code SQL est bon.

                                  -
                                  Edité par LaventureEstivene 26 avril 2021 à 18:59:47

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    26 avril 2021 à 19:12:24

                                    ce n'est pas le tout d'écrire une requête, il faut la faire exécuter par la SGBD

                                    PS: dans ton premier, cas, il faut concaténer la chaine de la ligne 5 à la fin (Requete = Requete & "...."), sinon tu écrases le contenu de la variable à chaque fois. tu peux jeter un oeil par là https://drq.developpez.com/vb/tutoriels/ADO/ 

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      29 avril 2021 à 13:02:13

                                      Dis moi Umfred, la méthode ADO prend elle en compte les protocole SSL et DHTML lors de la connections et je ne comprend pas l'argument "provider" utiliser dans l'exemple du lien. C'est quoi le langage server , ou le nom du server ?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        29 avril 2021 à 13:13:09

                                        le nom du serveur, c'est le nom du pc qui héberge la base

                                        le provider/driver c'est pour dire (en gros) quel protocole/"moteur" SQL utilisé pour communiquer avec la base (il y a quelques différences entre le SQL des différents types de base (MySQL, SQL Server, Access, ....)

                                        pour le SSL, il y a un paramètre dans la chaine de connexion à rajouter

                                        "Trusted_Connection=Yes" pour SQL Server

                                        "SslMode=Preferred;" ou "SslMode=Required;" pour MySQL

                                        https://www.connectionstrings.com/ 

                                        -
                                        Edité par umfred 29 avril 2021 à 13:18:00

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          1 mai 2021 à 21:14:28

                                          J'ai un problème, j'ai télécharger MySQL Community, My Workbench et ODBC connector et maintenant mon code ne fonctionne plus !

                                          -
                                          Edité par LaventureEstivene 3 mai 2021 à 11:00:33

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 mai 2021 à 14:48:19

                                            mêmes questions que précédemment, le nom du serveur MySQLCommunity, Est-ce qu'il y a les 2 serveurs le précédent (avec wamp) et le mysql community ? le service de MySQL Community est bien lancé ? (réglage du port éventuellement).

                                            un message d'erreur? si oui lequel ? enfin bref, toute information qui pourrait aider

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 mai 2021 à 16:46:22

                                              J'ai télécharger mysql community la dessus : https://www.mysql.com/fr/products/community/

                                              et installer son dossier dans mon fichier document. Je n'ai rien fais d'autre avec ne sachant pas l'ouvrir.

                                              J'ai essayé un autre code comme tu vois mais sans succès.

                                              Et voici les bibliothéque utilisé: 

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 mai 2021 à 19:06:16

                                                hum, rappelle moi quel moteur de base de données tu utilises :-° MySQL, SQL Server, ... ?

                                                est-ce que c'est le bon provider/Driver ? pourquoi ce n'est pas le même que précédemment ?

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  5 mai 2021 à 15:03:55

                                                  Alors j'ai résolu le problème, il me fallait paramétré les gestionnaires drivers. Mais maintenant que les messages d'erreur ont disparue je me demande comment faire pour vérifier la connexion.

                                                  J'ai utilisé ce code pour modifier ma database mais sans succès:

                                                  Function Connection()
                                                     Dim source As String, location As String, user As String, password As String, mysql_driver As String, database As String
                                                      Dim requete As String
                                                      source = "MySQL"
                                                      location = "localhost"
                                                      user = "root"
                                                      password = ""
                                                      database = "monsite"
                                                      mysql_driver = "MySQL ODBC 8.0 ANSI Driver"
                                                   
                                                      'Build the connection string
                                                      Dim connectionString As String
                                                   
                                                      connectionString = "Driver={" & mysql_driver & "};Server=" & location & ";Database=" & database & ";UID=" & user & ";PWD=" & password & ""
                                                   
                                                      'Create and open a new connection to the selected source
                                                      Set OpenConnection = New ADODB.Connection
                                                      OpenConnection.CursorLocation = adUseClient
                                                      Call OpenConnection.Open(connectionString)
                                                      requete = " CREATE DATABASE IF NOT EXISTS `vbamysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;" & _
                                                              "USE `vbamysql`;" & _
                                                              "CREATE TABLE IF NOT EXISTS `voitures` (" & _
                                                              "`id` INTEGER NOT NULL auto_increment," & _
                                                              "`marque` VARCHAR(25) NOT NULL," & _
                                                              "`modele` VARCHAR(25) NOT NULL ," & _
                                                              "`cv` INTEGER," & vbCrLf & _
                                                              "PRIMARY KEY (`id`)," & _
                                                              "UNIQUE (`modele`)" & _
                                                              ") ENGINE = InnoDB ;"
                                                      
                                                  End Function
                                                    
                                                  Sub Macro1()
                                                  Connection
                                                  End Sub



                                                  -
                                                  Edité par LaventureEstivene 5 mai 2021 à 20:58:53

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    5 mai 2021 à 15:14:01

                                                    exécute une requête (un select si une table existe dans ta base de données); mais si il n'y a pas d'erreurs, sur connection.open, alors c'est bon
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      6 mai 2021 à 19:39:44

                                                      Alors tenté le cout et le SELECT n'y change rien qui a changé !

                                                      -
                                                      Edité par LaventureEstivene 7 mai 2021 à 10:38:21

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        7 mai 2021 à 11:12:36

                                                        on va le répéter, il faut exécuter la requête, là dans le code, tu ne fais que l'écrire dans une variable string.
                                                        Dim Rst As ADODB.Recordset
                                                        Set Rst= new ADODB.Recordset
                                                        Rst.Open requete, OpenConnection
                                                        https://drq.developpez.com/vb/tutoriels/ADO/#LIV
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          7 mai 2021 à 22:29:28

                                                          Ca n'a pas marcher mais j'ai pue ey arriver avec une modification de mon code

                                                          Sub test()
                                                          
                                                              Const Server = "LocalHost", Port = "3306", User = "root", Password = "xxxx": Dim DataBase
                                                          With CreateObject("ADODB.Connection")
                                                                  .Open "Driver={MySQL ODBC 8.0 Unicode Driver};Server=" & Server & ";Port=" & Port & ";Database=" & DataBase & ";User=" & User & ";Password=" & Password & ";"
                                                                      requete = "CREATE DATABASE IF NOT EXISTS `vbamysql` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
                                                                      .Execute requete
                                                                  .Close
                                                                  DataBase = "vbamysql"
                                                                  .Open "Driver={MySQL ODBC 8.0 Unicode Driver};Server=" & Server & ";Port=" & Port & ";Database=" & DataBase & ";User=" & User & ";Password=" & Password & ";"
                                                                       requete = "CREATE TABLE IF NOT EXISTS  `voitures`" & vbCrLf & _
                                                                                 "(`id` INTEGER NOT NULL auto_increment,`marque` VARCHAR(25) NOT NULL,`modele` VARCHAR(25) NOT NULL ,`cv` INTEGER," & vbCrLf & _
                                                                                 "PRIMARY KEY (`id`),UNIQUE (`modele`)) ENGINE = InnoDB ;"
                                                                  .Execute requete
                                                                  .Close
                                                          End With
                                                          End Sub

                                                          Merci encore pour ton aide tu m'as beaucoup appris ! 

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          [VBA Excel] Accéder à une Database SQL

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown