VBA requete SQL SELECT

Résolu
chrisXP -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je fait actuellement une macro VBA pour manipuler mon logiciel de dessin (corel draw)
J'ai besoin de votre aide car je sèche, j'arrive a faire en sql une requête insert mais impossible de récupérer le résultat d'un select dans une variable...

J'ai beau chercher des exemples depuis qque jours, rien ne fonctionne :(

La table de l'exemple s'appelle test_connection
elle ne comporte que 2 champs :
User
Timestamp (horodatage de la creation de l'enregistrement)

J'ai activé les références,
Microsoft ActiveX Data Objects Recordset 2.8
Microsoft ActiveX Data Objects 2.6
Microsoft DAO 3.6 Object

Voici ce qui marche pour un insert, mais je ne trouve pas d'exemple fonctionnel pour un select ou un update :(

Dim oConn As ADODB.Connection
Dim rs As ADODB.Recordset

Private Sub ConnectDB()
    Set oConn = New ADODB.Connection
    oConn.Open "DRIVER={MySQL ODBC 5.1 Driver};" & _
        "SERVER=<<ip de mon serveur>>;" & _
        "DATABASE=<<nom de la base>>;" & _
        "USER=<<utilisateur>>;" & _
        "PASSWORD=<<mdp>>;" & _
        "Option=3"
End Sub

Private Sub InsertData()

    Set rs = New ADODB.Recordset

    ConnectDB

    With wsBooks
    strSQL = "INSERT INTO test_connection (User) " & _
                  "VALUES ('Dupont')"

    rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
    End With

End Sub



Par avance merci à qui voudra bien m'aider

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    si vous voulez un enregistrement particulier, il faudra ajouter une close WHERE

    Private Sub SelectData()
    
        Set rs = New ADODB.Recordset
    
        ConnectDB
    
        With wsBooks
            'requete tous les champs de la table
            strSQL = "select * from test_connection"
            rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
            'test si au moins un enregistrement
            If Not rs.BOF And rs.EOF Then
                rs.MoveFirst
                Do While Not rs.EOF
                    'recuperation valeur champ
                    X = rs.Fields("nom du champ")
                    rs.MoveNext
                Loop
            End If
        End With
    
    End Sub


    A+
    0
    1. chrisXP Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Un grand merci pour ta réponse :D, par contre ca ne fonctionne pas quand le l'adapte j'ai en retour "le pilote ODBC ne prends pas en charge les propriétés demandées je pense que ma syntaxe sql est fausse...

      Private Sub SelectData()
      
          Set rs = New ADODB.Recordset
      
          ConnectDB
      
          With wsBooks
              'requete tous les champs de la table
              strSQL = "SELECT Timestamp FROM test_connection Where User = \'Chris\'"
              rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
              'test si au moins un enregistrement
              If Not rs.BOF And rs.EOF Then
                  rs.MoveFirst
                  Do While Not rs.EOF
                      'recuperation valeur champ
                      x = rs.Fields("Timestamp")
                      rs.MoveNext
                  Loop
              End If
          End With
      
      MsgBox (x)
      
      End Sub
      
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      pourquoi des "\" ???

      strSQL = "SELECT Timestamp FROM test_connection Where User = \'Chris\'"

      essayez ceci:

      strSQL = "SELECT Timestamp FROM test_connection Where User = 'Chris'"
      0
    3. chrisXP Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Effectivement :) je n'ai plus le message d'erreur en retirant les backslash, mais la ligne Msgbox (x) m'ouvre une boite de dialogue vide... x est-il bien le résultat du select ?
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Oui, dans x, il y a normalement le contenu du champ Timestamp

      mettez MsgBox (x) avant le loop, pour voir si vous avez un enregistrement

      A+
      0
    5. chrisXP Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
       
      Selon vos consigne j'ai désormais :

      Private Sub SelectData()
      
          Dim x As String
          Set rs = New ADODB.Recordset
      
          ConnectDB
      
          With wsBooks
              'requete tous les champs de la table
              strSQL = "SELECT Timestamp FROM test_connection where User = 'Chris'"
              rs.Open strSQL, oConn, adOpenDynamic, adLockOptimistic
              'test si au moins un enregistrement
              If Not rs.BOF And rs.EOF Then
                  rs.MoveFirst
                  Do While Not rs.EOF
                      'recuperation valeur champ
                      x = rs.Fields("Timestamp")
                      rs.MoveNext
                      MsgBox (x)
                  Loop
              End If
          End With
      
      
      
      End Sub
      


      Tout ce déroule sans erreur mais je n'ai pas de msgbox qui s'ouvre :(
      0