VBA requete SQL SELECT

Résolu/Fermé
Signaler
-
Messages postés
16135
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 décembre 2021
-
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

Messages postés
16135
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 décembre 2021
1 566
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+
Messages postés
16135
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 décembre 2021
1 566
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+
Messages postés
4
Date d'inscription
mercredi 7 août 2013
Statut
Membre
Dernière intervention
7 août 2013

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 :(
Messages postés
16135
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 décembre 2021
1 566
Re,

Donc, il n'y a pas d'enregistrement trouve, probleme avec la syntaxe de la requete ou n'existe pas d'enregistrement.
Messages postés
4
Date d'inscription
mercredi 7 août 2013
Statut
Membre
Dernière intervention
7 août 2013

Bon après bidouillage ca marche comme cela :

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
        
        x = rs.Fields("Timestamp")
        MsgBox (x)
   
    End With



End Sub


En tout cas un TRES TRES TRES grand merci pour votre aide ! :D
Messages postés
16135
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
8 décembre 2021
1 566
Re,

Ce n'est pas du bidouillage, c'est la bonne syntaxe. Au depart, j'avais hesite entre ce que je vous ai propose (qui existe aussi, suivant les cas) et ce que vous avez trouve