VBA requete SQL SELECT

Résolu
chrisXP -  
f894009 Messages postés 17277 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

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   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
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
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   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