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

SQL Firebird Discussion :

Copier des enregistrements dans un fichier texte


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut Copier des enregistrements dans un fichier texte
    Bonjour à tous,

    Je cherche a copier les enregistrements d'une table dans un fichier texte. j'ai trouvé ce lien https://www.developpez.net/forums/d6...table-fichier/ mais il marche pas pour firebird.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    mais il marche pas pour firebird.
    Évidemment puisque dans mySQL !

    Il faut utiliser une table externe, voir la documentation https://firebirdsql.org/file/documen...l-tbl-external
    OU
    Utiliser un GUI, je sais que Flamerobin permet de le faire.
    Reste à savoir si c'est un besoin ponctuel ou une procédure à mettre en place
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Reste à savoir si c'est un besoin ponctuel ou une procédure à mettre en place
    Je veut mettre une procédure qui s’exécute au besoin.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Comme d'habitude ce n'est pas les infos fournies qui vous étouffent ! Aucune base de départ (Structure de ce que vous voulez obtenir, de la table de départ) pour travailler n'aide pas !

    donc il faut un exemple

    une table de départ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE TABLETEST
    ( ID INTEGER,
      TEXTE VARCHAR(20)
    );
    -- avec données
    INSERT INTO TABLETEST (ID, TEXTE)
     VALUES ( 1,'AAAAAAAAAAAAAA');
    INSERT INTO TABLETEST (ID, TEXTE)
     VALUES ( 2,'BBBBBBBBBBBB');
     INSERT INTO TABLETEST (ID, TEXTE)
     VALUES ( 3,'CCCCCCCC');
    une table qui va recevoir le résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TABLE t1 EXTERNAL FILE 'C:\Livres\Test.TXT'  -- Attention 2 conditions un répertoire existant non protégé, une modification de firebird.conf 
        ID CHAR(5), -- remarquez bien le type --évitez d'utiliser autre chose que des chaines de caractères si vous voulez quelque chose de lisible
        NAME VARCHAR(32),
        CRLF CHAR(2)  -- changement de ligne windows ASCII_CHAR(13)||ASCII_CHAR(10)
        );
    la procédure
    Code SQL : 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
    SET TERM ^ ;
    ALTER PROCEDURE OUT_TOTEST 
    RETURNS (
        LIGNES Integer )
    AS
    DECLARE VARIABLE AID INTEGER;
    DECLARE VARIABLE ATEXTE VARCHAR(32);
     
    BEGIN
      LIGNES=0;
      FOR SELECT ID,TEXTE FROM TABLETEST INTO :AID,:ATEXTE DO
       BEGIN
         LIGNES=LIGNES+1;
         INSERT INTO T1 (ID, NAME,CRLF) VALUES (:AID,:ATEXTE,ASCII_CHAR(13)||ASCII_CHAR(10));
       END
      SUSPEND; 
    END^
    SET TERM ; ^

    exécution
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT p.LIGNES FROM OUT_TOTEST p

    ATTENTION ! un fichier non vidé entraine l'ajout des données en fin de fichier
    résultat
    Nom : Capture2.PNG
Affichages : 545
Taille : 3,4 Ko
    Encore des caractères non lisible ! la faute à : la structure de la table externe (contient des varchar)


    en changeant la structure (que des char(xxx)) le remplissage ( LPAD(:AID,'0'), RPAD(:ATEXTE) ) vous vous rapprocherez petit à petit d'un résultat conforme à une transmission de données informatisées "à l'ancienne" : fichier de longueur fixe sans séparateurs.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    Merci pour la réponse j'ai bien compris la méthode. Cependant avec cette méthode on est obligé de créer autant de tables externes que de table d'envoi. Je m'explique, mon but et de pouvoir convertir en fichier texte plusieurs table avec des champs différent pour chaqu'une. Moi j'ai une base de données avec 50 tables donc il faut créer 50 tables externe

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    J'ai répondu à cette question correspondant au titre
    Citation Envoyé par chekkal Voir le message
    Je cherche a copier les enregistrements d'une table dans un fichier texte.
    Citation Envoyé par chekkal Voir le message
    Je m'explique, mon but et de pouvoir convertir en fichier texte plusieurs table avec des champs différent pour chacune. Moi j'ai une base de données avec 50 tables donc il faut créer 50 tables externe
    Vous changez les données du problème !

    Citation Envoyé par SergioMaster Voir le message
    Comme d'habitude ce n'est pas les infos fournies qui vous étouffent !
    j'ai l'impression que vous avancez au petit bonheur la chance, votre cahier des charges mal défini. Plus ça va plus j'ai l'impression que vous voulez en quelque sorte réinventer le backup, cela ressemble de plus en plus a un DUMP de la base de données, mais uniquement des données !

    Savez vous qu'il existe des programmes tout fait comme FBExport qui pourrait peut être convenir ?
    (un programme Delphi pourrait aussi convenir)


    Enfin rien ne vous empêche de résoudre le problème et utiliser qu'une seule table externe
    par exemple :

    solution par concaténation
    1-la structure de la table externe est à définir en fonction de la taille d'une ligne de la plus grande table
    2-trois colonnes seulement pour la table externe : NOMTABLE CHAR(32),DATA VARCHAR(<taille>),CRLF CHAR(2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO T1 (NOMTABLE, DATA,CRLF) VALUES  SELECT 'MATABLE1',CHAMP1||';'||CHAMP2||';'||CHAMP3,ASCII_CHAR(13)||ASCII_CHAR(10)) FROM MATABLE1
    INSERT INTO T1 (NOMTABLE, DATA,CRLF) VALUES  SELECT 'MATABLE2',CHAMP1||';'||CHAMP2,ASCII_CHAR(13)||ASCII_CHAR(10)) FROM MATABLE2
    vous ne pourrez pas utiliser cette table, ou du moins très difficilement , comme table en lecture
    chaque champ est à traiter comme CHAR(x) donc nécessite CAST et LPAD,RPAD (encore que cela dépende de ce que vous voulez faire avec)
    attention les colonnes contenant des ' ou " pourraient tout faire planter
    j'ai mis des ';' pour séparer chaque champ dans la colonne DATA
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 379
    Points : 19 060
    Points
    19 060
    Par défaut
    Salut à tous.

    Voici un petit exemple d'export vers une table externe :
    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
    -- ===================
    -- Vidage Table 'Test'
    -- ===================
     
    select * from test;
     
         ID LIB1       LIB2       LIB3
    ======= ========== ========== ==========
          1 un         eins       one
          2            zwei       two
          3 trois                 three
          4 quatre     vier       four
          5 cinq       funf
         13 treize     dreizehn   thirteen
     
     
    -- ===============================
    -- Création table externe 'Export'
    -- ===============================
     
    drop table Export;
     
    CREATE TABLE Export external 'e:\31.FireBird\30.Table_Externe\Ex_03\Fichier_2.txt'
    (  id      smallint,
       lb1  varchar(10),
       lb2  varchar(10),
       lb3  varchar(10),
       CRLF    char(02)
    );
     
    -- ==================================
    -- Remplissage table externe 'Export'
    -- ==================================
     
    insert into Export
    select id,
           lib1 as lb1,
           lib2 as lb2,
           lib3 as lb3,
           ASCII_CHAR(13)||ASCII_CHAR(10) as crlf
    from test;
     
    -- =====================
    -- Vidage table 'Export'
    -- =====================
     
    select id, lb1, lb2, lb3 from Export;
     
         ID LB1        LB2        LB3
    ======= ========== ========== ==========
          1 un         eins       one
          2            zwei       two
          3 trois                 three
          4 quatre     vier       four
          5 cinq       funf
         13 treize     dreizehn   thirteen
     
     
    exit;
     
    Appuyez sur une touche pour continuer...
    Et voici le contenu de la table export :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      un         eins       one       
                  zwei       two       
      trois                  three     
      quatre     vier       four      
      cinq       funf                  
     
      treize     dreizehn   thirteen
    Ce n'est pas exactement un fichier texte, mais bon, c'est à vous de gérer vos colonnes par le type char.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/04/2015, 11h22
  2. [WM18] Comment enregistrer des valeurs dans un fichier texte sous IOS
    Par nico78 dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 26/08/2013, 15h13
  3. Copier/coller des données dans un fichier texte
    Par ftrap dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/07/2013, 22h56
  4. Réponses: 4
    Dernier message: 22/07/2010, 15h46
  5. Réponses: 3
    Dernier message: 22/02/2004, 20h09

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