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 :

Comment créer un Recordset à partir d'un autre Recordset


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut Comment créer un Recordset à partir d'un autre Recordset
    Bonjour,

    Pour des raisons pratique j'ai créé un Recordset manuellement comme suit.
    Cela fonctionne.

    Voici un exemple :
    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
    Sub Céer_Table_déconnectée()
     
        Dim rs As ADODB.Recordset
        Set rs = New ADODB.Recordset
     
        'Création de la table
        'Ajout de deux champs
        With rs
            .Fields.Append "Value", adInteger
            .Fields.Append "Name", adVarChar, 20
            .LockType = adLockOptimistic
            .Open , , adOpenStatic
        End With
     
        ' Ajout d'un enregistrement
        rs.AddNew
        rs![Value] = 97
        rs![Name] = "Martin"
     
        ' Ajout d'un enregistrement
        rs.AddNew
        rs![Value] = 96
        rs![Name] = "Paul"
     
        etc...
     
        rs.Update
     
     
    End Sub

    Comment faire pour créer un 2ème Recordset rs2, qui sera en fait une requête sur la table rs ? (sans utiliser les filtres)
    Pour exemple, rs2 devra être un recordset qui reprend uniquement les champs où [Value]=48.


    Merci

    A+

    Dams'

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 759
    Points : 14 793
    Points
    14 793
    Par défaut
    Bonsoir,
    Utilise la méthode Clone du RecordSet:
    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
    Sub Céer_Table_déconnectée()
        Dim rs As ADODB.Recordset
        Dim rs2 As ADODB.Recordset
        Set rs = New ADODB.Recordset
        
        'Création de la table
        'Ajout de deux champs
        With rs
            .Fields.Append "Value", adInteger
            .Fields.Append "Name", adVarChar, 20
            .LockType = adLockOptimistic
            .Open , , adOpenStatic
        End With
     
        ' Ajout d'un enregistrement
        rs.AddNew
        rs![Value] = 97
        rs![Name] = "Martin"
     
        ' Ajout d'un enregistrement
        rs.AddNew
        rs![Value] = 96
        rs![Name] = "Paul"
     
     
        rs.Update
        Set rs2 = rs.Clone
     
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juin 2006
    Messages
    622
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 622
    Points : 156
    Points
    156
    Par défaut
    bonjour,

    Si j'utilise "Clone", rs2 sera la copie conforme de rs.
    Or dans mon cas je souhaite que rs2 soit une requête différente.
    Pour exemple, rs2 devra être un recordset qui reprend uniquement les champs où [Value]=48.
    ... et ce sans utiliser les filtres.

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 759
    Points : 14 793
    Points
    14 793
    Par défaut
    Bonsoir,
    je ne suis pas sur de tout comprendre et la finalité de ce que tu souhaites, de plus tu imposes des contraintes.
    Essaie ceci :
    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
    47
    Sub Céer_Table_déconnectée()
        Dim I As Integer
        Dim rs As ADODB.Recordset
        Dim rs2 As ADODB.Recordset
     
        Set rs = New ADODB.Recordset
     
        'Création de la table
        'Ajout de deux champs
        With rs
            .Fields.Append "Value", adInteger
            .Fields.Append "Name", adVarChar, 20
            .LockType = adLockOptimistic
            .Open , , adOpenStatic
            Set rs2 = .Clone
        End With
     
        ' Ajout d'un enregistrement
        rs.AddNew
        rs![Value] = 97
        rs![Name] = "Martin"
     
        ' Ajout d'un autre enregistrement
        rs.AddNew
        rs![Value] = 96
        rs![Name] = "Paul"
     
         ' Ajout d'un 3ème enregistrement
        rs.AddNew
        rs![Value] = 48
        rs![Name] = "Jacques"
     
        rs.Update
        rs.Close
     
         ' on ne garde que l'enregistrement concerné
        While Not rs2.EOF
        If rs2![Value] <> 48 Then
            rs2.delete
            rs2.Update
        End If
            rs2.MoveNext
        Wend
     
     Set rs = Nothing
     Set rs2 = Nothing
    End Sub
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

Discussions similaires

  1. Comment créer une table à partir d'une autre table
    Par martinou34 dans le forum Administration
    Réponses: 4
    Dernier message: 09/10/2013, 14h43
  2. [Toutes versions] Recordset à partir d'un autre recordset ?
    Par damsmut dans le forum VBA Access
    Réponses: 7
    Dernier message: 10/04/2011, 06h03
  3. Réponses: 5
    Dernier message: 17/10/2008, 15h41
  4. Réponses: 2
    Dernier message: 30/01/2007, 09h02
  5. [VBA-A]Comment créer une table à partir d'un recordset ?
    Par NoViceDel dans le forum VBA Access
    Réponses: 22
    Dernier message: 23/05/2006, 16h10

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