IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Donnée dans recordset ADO


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Par défaut Donnée dans recordset ADO
    Bonjour,

    Je suis bloqué. Je n'arrive pas à mettre une donnée dans l'enregistrement sélectionné. Dans le code qui suit, il me met des 1 dans le champ "champ1" de tous les enregistrements.
    Mon but est qu'il le mette uniquement dans l'enregistrement sélectionné selon la condition du champ2.

    Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    ' Dimension
    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
     
    'Option Base 0
    Option Explicit
     
    Sub Main1()
    If DBConnection(True) = True Then
        Set rs = New ADODB.Recordset
        If (rs.State = 1) Then rs.Close
        rs.Open "SELECT champ1 " & _
                "FROM table1 " & _
                "WHERE champ2 = 'Paris' " & _
                "", cn, adOpenKeyset, adLockOptimistic, adCmdText
        rs.Fields("champ1").Value = "1"
        rs.Update
    End If
    If (rs.State = 1) Then rs.Close
    Set rs = Nothing
     
    Call DBConnection(False)
    End Sub
     
    Private Function DBConnection(ByVal bOpen As Boolean) As Boolean
    Dim bResult As Boolean
    On Error GoTo Connect_Error
    bResult = False
    If bOpen = True Then
            'Connexion
            Set cn = New ADODB.Connection
            cn.CursorLocation = adUseServer
            cn.Open ("DSN=ERP1")
            bResult = (cn.State = 1)
    Else
            'Déconnexion
            If cn.State = 1 Then cn.Close
            Set cn = Nothing
            bResult = True
    End If
    DBConnection = bResult
    Exit Function
    Connect_Error:
        MsgBox "Erreur lors de la connexion à l'ERP.", vbCritical
        DBConnection = False
    End Function

  2. #2
    Membre Expert
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Par défaut
    Bonjour,

    Il ne te manquerait pas un espace à la fin de cette ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        rs.Open "SELECT champ1 " & _
    et un guillemet sur cette ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    "WHERE champ2 = 'Paris' " & _

  3. #3
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Par défaut
    Oups oui,

    En recopiant j'ai fait des fautes. J'ai remplacé mon code par des termes explicite.

    Mais cela ne marche toujours pas.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Difficile de te répondre car il y a beaucoup erreur dans ton code.
    Déjà c’est bien de vérifier si un Recordset est ouvert mais après un Set rs = New ADODB.Recordset Il est toujours fermé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rs = New ADODB.Recordset
        If (rs.State = 1) Then rs.Close
    La requête
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "SELECT champ1" & _
                "FROM table1 " & _
                "WHERE champ2 = Paris' " & _
                ""
    En réalité tu as écris :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT champ1FROM table1 WHERE champ2 = Paris' "
    et pas
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT champ1 FROM table1 WHERE champ2 = 'Paris' "
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rs.Fields("champ1").Value = "1"
        rs.Update
    Je suis surpris que ça fonctionne car ton Rs doit être à Nothing !!
    Si non cette syntaxe fonctionne mais a mon avis pas avec la chaine SQL ;
    Personnellement j’aurais choisi une requête de mise à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cn.execute "update table1 set champ2="1" WHERE champ2 = 'Paris';"

  5. #5
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Mars 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 22
    Par défaut
    Merci rdurupt,

    Ca marche. C'est éxactement ce que je voulais faire.

    Voici le code final

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    ' Dimension
    Dim cn As ADODB.Connection
     
    'Option Base 0
    Option Explicit
     
    Sub Main1()
    If DBConnection(True) = True Then
        cn.Execute "update table1 set champ1='4' WHERE champ2 = 'Paris';"
    End If
    Call DBConnection(False)
    End Sub
     
    Private Function DBConnection(ByVal bOpen As Boolean) As Boolean
    Dim bResult As Boolean
    On Error GoTo Connect_Error
    bResult = False
    If bOpen = True Then
            'Connexion
            Set cn = New ADODB.Connection
            cn.CursorLocation = adUseServer
            cn.Open ("DSN=ERP1")
            bResult = (cn.State = 1)
    Else
            'Déconnexion
            If cn.State = 1 Then cn.Close
            Set cn = Nothing
            bResult = True
    End If
    DBConnection = bResult
    Exit Function
    Connect_Error:
        MsgBox "Erreur lors de la connexion à l'ERP.", vbCritical
        DBConnection = False
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Remplir une feuille de données avec recordset ADO
    Par Peper89 dans le forum VBA Access
    Réponses: 5
    Dernier message: 17/06/2010, 11h49
  2. ADO Excel, Supprimer Données dans Fichier Fermé
    Par vaucluseimmo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/08/2008, 19h20
  3. Requête croisée dans un recordset ADO
    Par MuadDib_CH dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 12/09/2006, 16h23
  4. [D5] Ecriture dans un ADO Recordset
    Par bernie.noel dans le forum Delphi
    Réponses: 4
    Dernier message: 07/09/2006, 17h09
  5. VB6 - Syntaxe dans les clauses de filtrage des recordsets ADO
    Par MGD_Software dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 06/07/2006, 11h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo