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

VBA Access Discussion :

Manipulation de ADODB.Recordset


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 372
    Par défaut Manipulation de ADODB.Recordset
    Bonjour,

    J'utilise un recordset pour sélectionner des données que je dois ensuite utiliser pour produire un fichier XML.
    Le fichier XML comporte jusqu'à 6 niveaux imposés.
    J'utilise une boucle de type Do While Not req.EOF pour parcourir mon recordset

    Je but sur un problème :
    - Pour déterminer si je dois ou non insérer la balise fermante de certains niveaux, je dois pouvoir vérifier une données sur la l'enregistrement suivant.
    - Je ne dois pas changer d'enregistrement actuel car il contient ds données que je dois insérer avant la balise fermante et avant de passer à l'enregistrement suivant.

    Je vois qu'il est possible de se déplacer dans le Recordset avec les méthodes Move mais cela m'oblige à faire en faire 2 (un previous et un next) et je trouve pas ça très clean.

    Ma question est donc :
    - Est il possible, sans le pointer (sans se déplacer dans le Recordset), de lire la valeur d'une rubrique de l'enregistrement suivant ?

    Merci d'avance de votre aide

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

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 959
    Par défaut
    bonsoir,
    Je but sur un problème :
    - Pour déterminer si je dois ou non insérer la balise fermante de certains niveaux, je dois pouvoir vérifier une données sur la l'enregistrement suivant.
    - Je ne dois pas changer d'enregistrement actuel car il contient ds données que je dois insérer avant la balise fermante et avant de passer à l'enregistrement suivant.
    ...
    Ma question est donc :
    - Est il possible, sans le pointer (sans se déplacer dans le Recordset), de lire la valeur d'une rubrique de l'enregistrement suivant ?
    n'est-il pas plus simple d'utiliser des variables pour mémoriser les informations de l'enregistrement lu précedemment ?

  3. #3
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 372
    Par défaut
    Merci de ton aide tee,

    Selon moi non car sir je les données que j'ai à utiliser dans l’enregistrement pointé (et elle sont nombreuses), je ne les ai plus après avoir changer d’enregistrement. Cela voudrait dire que je devrais stocker toutes les valeurs utilises dans x variables et ça me semble pas rationnel.

    Je sais pas si je suis clair

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 573
    Par défaut
    Bonjour,
    j'imagine que tu implémente tes balise dans un fichier texte, si non ta demande serait sans objet!

    je t’invite à t'intéresser à l'objet XMLDOM, c'est lui qui ouvre et referme le balise!

    https://baptiste-wicht.developpez.co...ipt/xml/xpath/

    je n'y crois pas trop mais bon!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rs As ADODB.Recordset
    rs.Save "c:\toto.xml", adPersistXML
    ceci dit tu peux imaginer d'établir un arborescence, j'ai fait un tes dans Excel avec
    NOM PNOM AGE PROFFESION TEL MAIL!

    Code Module standard : 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
    Private dico As Object
     Sub Test()
     Dim Rs As Object
    Set dico = CreateObject("Scripting.Dictionary")
    With CreateObject("Adodb.connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=YES;"""
        Set Rs = .Execute("select * from [Feuil1$]")
        While Not Rs.EOF
            If Not dico.exists(Rs!NOM.Value) Then dico.Add Rs!NOM.Value, New NOM
            dico(Rs!NOM.Value).Add Rs
            Rs.MoveNext
        Wend
        .Close
    End With
    For Each dco In dico.items
    Debug.Print dco.Xml
    Next
    End Sub
    Code Classe Nom : 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
    Private dico As Object
     
    Private Name As String, Value As String
    Private Sub Class_Initialize()
    Set dico = CreateObject("Scripting.Dictionary")
    End Sub
     
     
    Private Sub Class_Terminate()
    Set dico = Nothing
    End Sub
    Public Sub Add(Rs As Object)
    Name = "NOM": Value = Rs!NOM.Value
    If Not dico.exists(Rs!PNOM.Value) Then
        dico.Add Rs!PNOM.Value, New PNOM
        End If
     dico(Rs!PNOM.Value).Add Rs
    End Sub
    Public Function Xml() As String
        Xml = "<" & Name & ">" & Value & vbCrLf
            For Each dco In dico.items
                 Xml = Xml & dco.Xml
            Next
        Xml = Xml & "</" & Name & ">"
    End Function
    Code Classe PNOM : 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
    Private dico As Object
    Private Name As String, Value As String
    Private Sub Class_Initialize()
    Set dico = CreateObject("Scripting.Dictionary")
    End Sub
     
     
    Private Sub Class_Terminate()
    Set dico = Nothing
    End Sub
    Public Sub Add(Rs As Object)
    Name = "PNOM": Value = Rs!PNOM.Value
    If Not dico.exists(Rs!AGE.Value) Then
        dico.Add Rs!AGE.Value, New AGE
        End If
     dico(Rs!AGE.Value).Add Rs
    End Sub
    Public Function Xml() As String
        Xml = "<" & Name & ">" & Value & vbCrLf
            For Each dco In dico.items
                 Xml = Xml & dco.Xml
            Next
        Xml = Xml & "</" & Name & ">" & vbCrLf
    End Function

Discussions similaires

  1. Erreur ADODB.Recordset error '800a0e7d'
    Par Pokerstar dans le forum ASP
    Réponses: 10
    Dernier message: 14/05/2007, 14h45
  2. Problème avec adodb.recordset
    Par Pierre Fauconnier dans le forum VB.NET
    Réponses: 4
    Dernier message: 07/05/2007, 15h43
  3. ADODB.Recordset error '800a0cc1'
    Par fgerard dans le forum ASP
    Réponses: 2
    Dernier message: 29/08/2006, 16h11
  4. [jawin][DLL][VB] ADODB.recordset
    Par blaz dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 09/08/2005, 18h42
  5. Problème avec ADODB.Recordset
    Par Edouard Kaiser dans le forum ASP
    Réponses: 13
    Dernier message: 09/08/2005, 17h54

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