VBA requete SQL SELECT

Résolu/Fermé
chrisXP - 7 août 2013 à 10:34
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 - 7 août 2013 à 14:41
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

f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
7 août 2013 à 11:21
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
chrisXP Messages postés 4 Date d'inscription mercredi 7 août 2013 Statut Membre Dernière intervention 7 août 2013
7 août 2013 à 11:35
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
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
7 août 2013 à 12:41
Re,

pourquoi des "\" ???

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

essayez ceci:

strSQL = "SELECT Timestamp FROM test_connection Where User = 'Chris'"
0
chrisXP Messages postés 4 Date d'inscription mercredi 7 août 2013 Statut Membre Dernière intervention 7 août 2013
7 août 2013 à 13:34
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
f894009 Messages postés 17206 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 22 novembre 2024 1 710
7 août 2013 à 13:50
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
chrisXP Messages postés 4 Date d'inscription mercredi 7 août 2013 Statut Membre Dernière intervention 7 août 2013
7 août 2013 à 13:57
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