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

Access Discussion :

Extraire des données vers un fichier .txt paramétré.


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut Extraire des données vers un fichier .txt paramétré.
    Bonjour,

    N'étant pas un habitué d'Access et n'ayant rien trouvé sur le web qui réponde à ma question j'espère que qq'un pourra m'aider /
    Je souhaite extraire des éléments de tables acces et les incorporer dans un fichier texte qui (comme en xml) comporte des balises :

    Ex fichier :
    <formulaire>
    type_form =
    <client>
    id_client = (table_client.id_client)
    nom_client = (table_client.nom_client)
    </client>
    <data>
    nom_contact= (table_contact.nom_contact)
    prenom_contact= (table_contact.prenom_contact)
    </data>
    </formulaire>

    Merci pour votre aide

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut Re: Extraire des données vers un fichier .txt paramétré.
    Citation Envoyé par encoupe
    Bonjour,

    N'étant pas un habitué d'Access et n'ayant rien trouvé sur le web qui réponde à ma question j'espère que qq'un pourra m'aider /
    Je souhaite extraire des éléments de tables acces et les incorporer dans un fichier texte qui (comme en xml) comporte des balises :

    Ex fichier :
    <formulaire>
    type_form =
    <client>
    id_client = (table_client.id_client)
    nom_client = (table_client.nom_client)
    </client>
    <data>
    nom_contact= (table_contact.nom_contact)
    prenom_contact= (table_contact.prenom_contact)
    </data>
    </formulaire>

    Merci pour votre aide
    Bonjour et bienvenue sur les forums,

    il nous manque une info importante, savoir à quoi ce xml est destiné.
    Doit-il être normé ?
    Doit-il être importé et si oui dans quel système ?

    Sinon j'ai donné un code d'export XML : http://www.developpez.net/forums/vie...162696#2162696

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Effectivement j'ai oublié ces infos.

    Ce fichier est destiné a être importé via un site intranet dans une base oracle.
    Son nom importe peu du moment qu'il a une extension'.txt'.

    Le suel nommage important est à ce niveau :

    <formulaire>
    type_form = XXXX

    Merci, je vais aller voir votre code d'export XML.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Malheureusement votre code permet d'extraire une partie ou une table complète dans un fichier.
    Mon format d'export n'étant pas du XML, je dois créer des balises spécifiques, à l'intèrieur desquelles je dois mettre des données bien précises.

  5. #5
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    Je laisse Cafeine te guider en XML, parce que la solution devrait quand même être
    - d'exporter en un seul coup la table ou requête dans un format XML classique,
    - de simplement ajouter ensuite tes balises spécifiques autour du texte, ou d'en modifier d'autres, si nécessaire...

    Sinon, tu peux tout faire, ligne par ligne et champ par champ en créant ton ficher.txt à partir de VBA, mais c'est du boulot !

    Je te conseille, pour toute modif d'un fichier texte, d'utiliser une référence à l'objet Scripting (référence Microsoft Scripting Runtime), dont je te colle le petit exemple de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set a = fs.CreateTextFile("c:\Test\ExportOracle.txt", True)
    a.WriteLine ("<formulaire>")
    [...]
    a.Close

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Je ne sais pas si extraire d'abord 1 fichier XML puis le modifier serait plus simple que d'écrire directement le fichier en VBA (bien que je ne sache pas comment faire en VBA) car dans le fichier que je dois construire :

    <FORMULAIRE> --> est une balise a rajouter (dans un fic XML)
    type_form= --> est le nom d'une colonne dans laquelle je dois injecter le fichier et qui ne porte pas le meme nom que la colonne de mon Select

    et il en est de meme pour toutes les balises et item de mon fichier.

    Donc si tu pouvais me guider pour me dire comment faire en vba (ou avec srcipting runtime) pour créer un fichier txt en y insérant le résultat d'un select, cela m'aiderait bien.

    Merci

  7. #7
    Membre expérimenté
    Avatar de Papy Turbo
    Homme Profil pro
    Développeur Office/VBA
    Inscrit en
    Mars 2004
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Office/VBA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 822
    Points : 1 709
    Points
    1 709
    Par défaut
    OK. Si toi ou quelqu'un qui suit ce sujet, a besoin de + d'explications, à vous de le dire

    Je répète donc le début :
    - créer une référence à Microsoft Scripting Runtime (dans l'IDE - VBA, Outils, Références...)
    - Dans ta sub, ouvrir un recordset sur la table ou la requête que tu souhaites exporter,
    - exporter la 1ère balise (début de fichier),
    - Faire une boucle sur chaque enregistrement, du premier au dernier,
    - pour chaque enregistrement, exporter ce qu'il faut (?) avec balises, dans le fichier texte,
    - exporter la dernière balise,
    - fermer le tout...

    Malheureusement, tu ne nous expliques pas pour l'instant la structure des données : y a t'il un seul contact par client, par exemple ???

    Sinon, en gros, d'après tes indications, un exemple de code à déboguer (non testé) :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    Public Sub ExportClientsOracle(TextFilePath As String, _
                                   TextFileName As String, _
                                   TypeForm As String)
    Dim db              As DAO.Database
    Dim rs              As DAO.Recordset
    Dim FSO             As Scripting.FileSystemObject
    Dim F               As Scripting.File
    Dim TS              As Scripting.TextStream
     
        On Error GoTo Catch
        'Création du fichier texte
        Set FSO = New Scripting.FileSystemObject
        'vérifier la présence du "\" à la fin
        If Right(TextFilePath, 1) <> "\" Then
            TextFilePath = TextFilePath & "\"
        End If
        Set F = FSO.CreateTextFile(TextFilePath & TextFileName, True)
        Set TS = F.OpenAsTextStream(ForWriting, TristateUseDefault)
        'écriture de l'en-tête
        With TS
            .WriteLine "<formulaire>"
            .WriteLine "type_form = " & TypeForm
        End With
        'Ouverture du recordset
        Set db = CurrentDb
        Set rs = db.OpenRecordset("Clients")
        With rs
            If .EOF Then
                MsgBox "y a rien à exporter !", vbCritical
                GoTo Finally    'fermer proprement ======================
            End If
            .MoveFirst
            'boucle pour chaque enregistrement
            Do While Not .EOF
                TS.WriteLine "<client>"
                TS.WriteLine "id_client = " & !id_client
                TS.WriteLine "nom_client = " & !Nom_Client
                TS.WriteLine "<client>"
                TS.WriteLine "<data>"
                TS.WriteLine "nom_contact = " & !nom_contact
                TS.WriteLine "prenom_contact = " & !prenom_contact
                TS.WriteLine "<data>"
                .MoveNext
            Loop
        End With
        'fermeture du fichier
        TS.WriteLine "<formulaire>"
    Finally:
        On Error Resume Next
        rs.Close
        Set rs = Nothing
        Set db = Nothing
        TS.Close
        Set TS = Nothing
        Set F = Nothing
        Set FSO = Nothing
        Exit Sub    '===================================
    Catch:
        Select Case MsgBox(Err.Description, vbAbortRetryIgnore + vbCritical, "*** Erreur non prévue ***")
        Case vbAbort
            'abandon
            Resume Finally  '====
        Case vbRetry
            Stop    'arrêt pour examiner/corriger l'erreur
            Resume
        Case vbIgnore
            'on essaie de continuer ?
            Resume Next
        End Select
    End Sub
    Maintenant, rien ne t'empêche d'ajouter des espaces devant les balises, pour les indenter proprement...

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci bcp pour ton aide.
    J'avais trouvé comment créer mon fichier avec le Scripting runtime, mais je me creusais encore la tête pour incorporé le résultat de mon select.
    Je n'ai plus qu'à m'attelé à la tâche (150 items à exporter).
    Pour répondre à ta question, un client n'a qu'un seul contact.
    Et encore un grand merci à toi

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

Discussions similaires

  1. extraire des données d'un fichier .txt
    Par granbapt dans le forum C
    Réponses: 6
    Dernier message: 09/08/2012, 12h39
  2. [AC-2003] extraire des données d'un fichier txt en VBa
    Par afifaNancy dans le forum VBA Access
    Réponses: 8
    Dernier message: 24/04/2012, 16h41
  3. Extraire des données d'un fichier txt dans un vecteur
    Par sam14 dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 22/02/2012, 12h56
  4. [Débutant] Besoin d'extraire des données d'un fichier txt
    Par Paul.R dans le forum MATLAB
    Réponses: 24
    Dernier message: 09/12/2009, 18h20
  5. Extraire des données d'un fichier .txt
    Par carlou135 dans le forum C++
    Réponses: 3
    Dernier message: 18/02/2008, 16h55

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