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 :

Export automatisé de données


Sujet :

Access

  1. #1
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 30
    Points
    30
    Par défaut Export automatisé de données
    Salutations à toutes et tous,

    J'ai un petit souci avec l'utilisation de la commande DoCmd.TransferText dans Access 97. Je vous explique:

    J'ai 54 tables à exporter. Ces tables change de "layout" (retrait et/ou ajout de champs) +/- tous les 2 mois. Je dois les exporter sous le format suivant:
    Fichier .txt
    Delimiter: ,
    Text qualifier: {none}
    Decimal symbol: .


    NB: Je dois charger les données dans une DB oracle en utilisant le SQL loader.

    Actuellement, je n'ai pas trouvé d'autre moyen que de définir 54 "export specifications" que j'utilise avec la commande TransferText. Vous imaginez bien le boulot que représente la modification de 54 specs lors du changement de layout.

    Access prévoit l'utilisation de format d'export "par défaut qui sont les suivant:
    Fichier .txt
    Delimiter: ;
    Text qualifier: "
    Decimal symbol: ,


    Est-il possible soit de modifier ces valeurs par défaut ou de définir de manière automatisée des specs d'export (les tables systèmes qui les conservent ne sont pas modifiables).

    Merci d'avance à celle ou celui qui pourra m'aider.

    P.

  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
    Crée une fonction d'export personnalisée qui parcourt un recordset, ainsi tu auras le contrôle sur ton output de A à Z.

  3. #3
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Aurais-tu un petit exemple?
    Je ne vois pas du tout par ou commencer.
    Comment en VBA puisje écrire une fonction qui écrit dans un fichier texte?
    Je n'ai jamais fait cela. Pourrais-tu me mettre sur la piste? Je me débrouillerai en suite.

    P.

  4. #4
    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
    un exemple ... c'est une très très vieille fonction chez moi, donc je n'ai pas fait la déclaration de variables.
    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
    Public Function XportFileFromQuery(ByVal Fic As String)
    Dim BD As Database
    Dim rec As Recordset
    Set BD = DBEngine.Workspaces(0).Databases(0)
     
    Check = DCount("[UnChamp]", "LaTable")
     
    If Check > 0 Then
        Set rec = BD.OpenRecordset("LaTable", DB_OPEN_DYNASET)
        rec.MoveLast
        Nb = rec.RecordCount
        Reset
        Fic1 = 1
        Open Fic For Output As #Fic1
        NbChamps = rec.Fields.Count
        rec.MoveFirst
     
        For i = 1 To Nb
            CurRec = ""
            For j = 0 To NbChamps - 1
                If rec.Fields(j).Type = dbBoolean Then
                    If rec.Fields(j) = True Then
                        CurRec = CurRec & 1 & ";"
                    Else
                        CurRec = CurRec & 0 & ";"
                    End If
                Else
                    If InStr(rec.Fields(j), Chr(13) & Chr(10)) Then
                        CurRec = CurRec & Replace(rec.Fields(j), Chr(13) & Chr(10), "¶") & ";"
                    Else
                        CurRec = CurRec & rec.Fields(j) & ";"
                    End If
                End If
            Next j
            CurRec = Left(CurRec, Len(CurRec) - 1)
            Print #Fic1, CurRec
            rec.MoveNext
        Next i
        Reset
    End If
     
    End Function

  5. #5
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Pour remettre un peu le code de cafeine au gout du jour, tu peux aussi utiliser les objets TextStrem de la classe FileSystemObject (Réference Microsoft Scripting Runtime). Ces objets manipulent avec aisance les fichiers textes. Fais une recherche avec les mots clés Fichier Texte sur le forum Access et Vb et tu trouveras plein d'exemple. N'oublies pas aussi la FAQ, elle regorge de conseils

  6. #6
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Merci pour toutes ces infos.
    Je teste tout ça et reviendrai en cas de besoin.

    P.

  7. #7
    Nouveau membre du Club

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 30
    Points
    30
    Par défaut
    Merci pour le coup de main. J'ai opté pour la deuxième solution. Je ne ferai jamais assez l'éloge de ce site.

    Pour partager, voici le code que j'ai utiliser:

    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
    'Création d'un fichier texte (.txt) portant le même nom que la table, pour chaque table présente dans la db Access. 
    'Format utilisé pour le SQL loander d'oracle:
    'Séparateur: ,
    'Séparateur décimal: .
    'Qualificateur de texte: rien
     
    Public Sub GenerateFiles()
        Dim tdf As TableDef
        Dim mDb As Database
     
        Set mDb = CurrentDb
     
        For Each tdf In mDb.TableDefs 'Parcours des tables
                Call CreateDataFile(tdf.Name, "H:\User\SQL_LOADER\Dat\" & tdf.Name & ".txt")
            End If
        Next tdf
    End Sub
     
    Public Sub CreateDataFile(eTableName As String, eFileName As String)
        Dim Fichier As FileSystemObject
        Dim Texte As TextStream
        Dim mDb As Database
        Dim mRs As Recordset
        Dim fld As Field
        Dim tdf As TableDef
        Dim i As Long
        Dim Test As Long, FldNum As Long
     
        Set mDb = CurrentDb
        Set mRs = mDb.OpenRecordset(eTableName, dbOpenDynaset, dbSeeChanges, dbPessimistic)
     
        Set Fichier = CreateObject("Scripting.FilesystemObject")
        Set Texte = Fichier.CreateTextFile(eFileName)
        Set tdf = mDb.TableDefs(eTableName)
     
        If mRs.BOF And mRs.EOF Then
            Exit Sub
        End If
     
        mRs.MoveLast
        mRs.MoveFirst
     
        For i = 1 To mRs.RecordCount 'Parcours des enregistrements de la table
            FldNum = 0 'variable de test pour éviter une virgule à la fin du dernier champ.
            For Each fld In tdf.Fields 'Parcours des champs
                FldNum = FldNum + 1
                If Not IsNull(mRs(fld.Name).Value) Then
                    Texte.Write (mRs(fld.Name).Value)
                End If
                If FldNum <> tdf.Fields.Count Then
                    Texte.Write (",")
                End If
            Next fld
            Texte.WriteLine
            mRs.MoveNext
        Next i
        Texte.Close
    End Sub
    P.

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

Discussions similaires

  1. exportation incomplète de données
    Par marco99 dans le forum 4D
    Réponses: 1
    Dernier message: 01/12/2006, 18h10
  2. exporter Base de donnée sur pc client
    Par flatron dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 13/09/2006, 23h36
  3. [3D] Export/Import des données graphics
    Par mister3957 dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 03/02/2006, 16h49
  4. Exporter base de données MySQL
    Par cedre22 dans le forum Administration
    Réponses: 2
    Dernier message: 15/12/2005, 17h26
  5. Export jeu de données uniquement
    Par jeff37 dans le forum Oracle
    Réponses: 1
    Dernier message: 01/07/2005, 18h16

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