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.
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.
Bonjour,
Évidemment puisque dans mySQL !mais il marche pas pour firebird.
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
Je veut mettre une procédure qui s’exécute au besoin.Reste à savoir si c'est un besoin ponctuel ou une procédure à mettre en place
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
une table qui va recevoir le résultat
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');
la procédure
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) );
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
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
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
Bonjour,
J'ai répondu à cette question correspondant au titre
Vous changez les données du problème !
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)
vous ne pourrez pas utiliser cette table, ou du moins très difficilement , comme table en lecture
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
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
Salut à tous.
Voici un petit exemple d'export vers une table externe :
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
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...
Ce n'est pas exactement un fichier texte, mais bon, c'est à vous de gérer vos colonnes par le type char.
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
@+
Si vous êtes de mon aide, vous pouvez cliquer sur .
Mon site : http://www.jcz.fr
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager