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

Delphi Discussion :

Fusionner des fichiers différents ayant un champ commun


Sujet :

Delphi

  1. #1
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut Fusionner des fichiers différents ayant un champ commun
    Bonjour,

    Le sujet a déjà démarré avec Barbibulle et SergioMaster et je pense qu'il est préférable de créer une nouvelle discussion.
    sélectionner deux fichiers ou plus (format principal CSV , mais d'autres formats existent) dans
    une liste et les fusionner sachant qu'au moins un champ est commun à l'ensemble.
    faire apparaître cette fusion dans un Grid disposant des fonctionnalités tris, filtres export etc..
    beau sujet n'est ce pas ?

    après avoir fait des recherches, j'envisage d'utiliser des tables externes mais c'est cuit de ce côté.
    autre solution :
    lire les fichiers, créer des tables Firebird, et importer les données
    Puis lancer un SQL avec une jointure
    et envoyez le tout dans un TcxDBGrid.

    qu'en pensez-vous ?

    cantador

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je dirais que ça dépend de :
    ce que tu entends par fusionner
    de la version de Delphi (avec Firedac on peut faire des requêtes FDLocalSQL pouvant travailler sur plusieurs SGBDs différents, et son FDBatchmove peut faire beaucoup de choses)

    Dans l'ancien temps j'utilisais des tables paradox temporaire pour faire le boulot et beaucoup de boucles ou de batchmoves (BDE)

    N.B. je n'ai jamais dit qu'il n'était pas possible de travailler Firebird avec des fichier externes CSV, c'est juste compliqué mais dans une procédure c'est faisable
    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 confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Je dirais que ça dépend de :
    ce que tu entends par fusionner
    Voilà :

    fichier1

    chc A B C
    1 10 15 18
    2 20 25 28
    3 30 35 38


    fichier2
    chc X Y Z
    1 12 17 16
    2 22 27 26
    3 32 37 36


    fusion
    chc A B C X Y Z
    1 10 15 18 12 17 16
    2 20 25 28 22 27 26
    3 30 35 38 32 37 36


    Dans l'ancien temps j'utilisais des tables paradox temporaire pour faire le boulot et beaucoup de boucles ou de batchmoves (BDE)
    J'ai moi aussi gouté à la période BDE et me suis battu avec les index des tables paradox..
    autre époque..

    je laisse un peu mariner et je donnerai la suite après.

    @+

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Heureusement que j'ai demandé ce que tu entendais par fusion car nous n'en avons pas la même définition ! moi je nomme plutôt ça une JOINTURE,
    dans la fusion je n'aurais toujours que 4 Colonnes avec sommes sur les champs ABC selon CHC
    ce qui est le plus étrange c'est que après tu parles bien de jointure d'où ma confusion

    et tu n'a pas répondu à la question primordiale
    Citation Envoyé par sergiomaster
    de la version de Delphi
    et donc des composants escomptés pour exploiter la base Firebird
    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 confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    sous delphi 7 et seven 32 ou 64 bits
    dernière version de Firebird.
    ok, c'est bien une jointure
    je passe dans ma tête toutes les étapes..
    ************************************
    il y a de tout dans les données..
    il faut que je vérifie s'il n'y a pas d'autres champs qui portent le même nom..
    et puis, tous mes postes sont en client firebird, donc la base sera en réseau
    et partagée...
    les noms des tables temporaires devront être différents..
    etc..

  6. #6
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    promis juré, demain je poste le début du programme et je laisse le plus facile
    pour SergioMaster..

    cantador

  7. #7
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Bonjour,

    Je profite de cet échange, pour féliciter les intervenants de ce très bon site avec un moteur de recherche pas très performant.
    Dès que l'on pose une question, il ne passe pas 5' avant
    qu'une armée de cuirassiers chevronnés interviennent, tous avec des titres
    ronflants bardés d'étoiles qui nous bombardent une dizaine de solutions avec très peu d'erreurs de code.
    Comment font-ils ?
    Et bien je vais vous le dire :
    On leur fait écouter des musiques subliminales et manger du bio pendant 40 jours, puis on les fouettent jusqu'à ce qu'ils crient en cœur "développez !".
    On leur greffent des puces qui envoient des bips dans leurs oreilles, même quand ils regardent starwars ou american snipper au cinéma.

    chapeau bas.

    Pour en revenir au
    sujet
    voici le zip : Pièce jointe 194006
    qui utilisent quelques composants exotiques (TZipForge, TIB_Transation, TIB_Connection, TIBOQuery, TxButton, TcxCheckGroup)

    MAIS, ça ne marche pas car je retombe sur le problème
    de la création d'une table à partir d'un .CSV
    dont la discussion
    est là :
    http://www.developpez.net/forums/d14...table-externe/

    si quelqu'un a une idée..

    cantador

  8. #8
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    précision:
    je peux me débrouiller pour récupérer toutes les données de tous les fichiers dans des champs de longueur fixe à 80.

  9. #9
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Salut

    Passer par une base de données pour fusionner deux fichiers me paraît disproportionné. J'ai fait ce genre de travail avec un script Python, ce qui ne prend pas beaucoup de temps.
    Si cela vous intéresse, je tâcherai de vous retrouver cela. Le portage sous Delphi ne doit pas être d'une grande complexité (surtout si les fichiers en entrée sont déjà triés (sinon il faut développer une routine de tri).

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  10. #10
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    Passer par une base de données pour fusionner deux fichiers me paraît disproportionné.
    merci e-ric de t'intéresser à la question.
    en fait, il peut y avoir plusieurs fichiers et pas toujours les mêmes.
    mais à y bien réfléchir, je pense que je m'attaque à la falaise et j'ai observé que sur une année entière
    ce sont toujours les mêmes fichiers qui reviennent..
    donc, je pense que je vais créer une base de données avec les tables correspondant aux fichiers.
    et du coup, j'aurais juste à vider les tables et à importer les enregistrements frais.
    le seul os est que si jamais, un nouveau champ apparaît ou si une champ est supprimé.
    c'est la raison pour laquelle, j'aurais bien aimé pouvoir créer à la volée mes tables en fonction des champs
    de la première ligne des csv.
    Je suis en train de construire une routine permettant de fixer des données à une taille fixe de 80 et de rajouter des blancs pour compléter
    puisque c'est apparemment la seule manière de pouvoir créer des tables externes.

    je vais bientôt pouvoir faire un test..

    @+

  11. #11
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut ,

    qu'elle est le nombre de ligne a gérer ?

    si tu n'as pas un gros volume un simple tableau a deux dimentsion suffirai

    je vois pas bien la difficulté
    il faut juste que tu repère l'indice de colonne que tu doit remplir
    pour ce faire tu peut te créer un tableau d’Entête globale
    et ensuite pour chaque fichier
    créer une liste des nouvelle colonne associe a l'indice ou elle se trouve sur l’entête global (G)

    imaginons que la colonne 2 (L) de ton nouveau fichier corresponde a la colonne 7 de ton entête global(G)
    dans ta liste des nouvelle colonne de ton fichier appelons la L
    tu auras L = [2][7]
    on complique un peut la 3 colonne du fichier correspond a la deuxième du global
    rien de plus simple
    L = [3][2]
    quand tu lis tes ligne tu connais la colonne que tu lis
    il te suffit de dire G[L[N]]
    pour la position en auteur j'ai considéré que la première conne est l'indice de la ligne celle ci se trouve assez facilement
    donc dans ta matrice tu aura
    M[Indice_Ligne,G[L[N]]] := Valeur lu sur la ligne

    voilou
    j’espère avoir été assez clair
    mes 2 Cts
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  12. #12
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    @anapurna

    oui, j'ai bien compris ton array of array of string..
    mais mon problème immédiat est de pouvoir avoir des noms de champs correspondants aux noms des entêtes de colonne.
    dois je les mettre dans des variables ou des paramètres ?
    merci

    nb:
    pour les tables externes, j'y suis presque, j'ai juste un problème de blancs qui curieusement se collent devant les données
    alors que je vide ma variable de concaténation..
    et donc, elles de décalent à chaque enregistrement et bien entendu, dès que la longueur de la zone est dépassée, je perds de l'information

    cantador

  13. #13
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    est ce que l'on peut mettre des AS dans un CREATE ?

  14. #14
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 419
    Points : 5 818
    Points
    5 818
    Par défaut
    salut

    dans le tableau d'entete Global c'est ici que tu met tes nom de champs et c'est lui qui te détermine ensuite ou tu place tes champs
    lors de la lecture du fichier dans le tableau d'entete local
    quand tu lis le premier fichier tu creer ton entete global et Local
    entete Global est du genre
    [Chp1][Chp2][Chp3][Chp4]
    et le local
    [1][2][3][4]

    a la lecture du deuxième fichier
    tu ajoute les entête supplémentairement dans le Global
    [Chp1][Chp2][Chp3][Chp4][Chp5][Chp6]
    dans le local selon ou ce place l'entete tu auras par exemple
    [1][6][3][5]
    en jouant avec les indice des entête tu construit facilement ta matrice
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  15. #15
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Salut

    Citation Envoyé par cantador Voir le message
    est ce que l'on peut mettre des AS dans un CREATE ?
    Question pour le moins ésotérique ... je ne suis pas sûr qu'elle est du sens.
    Que veux-tu faire ? renommer un champ ? Si tu veux créer une table, un simple ordre SQL CREATE à partir d'une chaîne de caractères calculée à partir des noms de tes colonnes devrait suffire, non ?

    oui, j'ai bien compris ton array of array of string..
    mais mon problème immédiat est de pouvoir avoir des noms de champs correspondants aux noms des entêtes de colonne.
    dois je les mettre dans des variables ou des paramètres ?
    merci
    Quel genre de paramètres ? Rien ne t'empêche de stocker ces noms de colonnes dans un autre tableau.

    pour les tables externes, j'y suis presque, j'ai juste un problème de blancs qui curieusement se collent devant les données
    alors que je vide ma variable de concaténation..
    et donc, elles de décalent à chaque enregistrement et bien entendu, dès que la longueur de la zone est dépassée, je perds de l'information
    de + en + confus dans ma petite tête. Tu nous parle d'un problème intrinsèque à ton code mais nous ne pouvons pas l'évaluer de cette façon. Peux-tu l'exposer s'il n'est pas trop long.

    En fait globalement, j'ai du mal de comprendre ta solution technique.

    Pour finir, je reviens à ma solution de script Python, manipules-tu des gros volumes ? Quand tu fusionnes tes fichiers sur la base d'une clé, que fais-tu des enregistrements qui n'ont pas de correspondance d'un fichier à un autre ? Est-ce que les données sont déjà triées selon la clé de fusion ?

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  16. #16
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par e-ric Voir le message
    Quand tu fusionnes tes fichiers sur la base d'une clé, que fais-tu des enregistrements qui n'ont pas de correspondance d'un fichier à un autre ? Est-ce que les données sont déjà triées selon la clé de fusion ?
    J'ai plus ou moins posé la question en tout début apparemment il s'agit plus de jonction sur un champ commun (LEFT JOIN ?) de fichier que de fusion

    Citation Envoyé par Cantador
    Dès que l'on pose une question, il ne passe pas 5' avant
    qu'une armée de cuirassiers chevronnés interviennent, tous avec des titres
    ronflants bardés d'étoiles qui nous bombardent une dizaine de solutions avec très peu d'erreurs de code.
    Comment font-ils ?
    Et bien je vais vous le dire :
    On leur fait écouter des musiques subliminales et manger du bio pendant 40 jours, puis on les fouettent jusqu'à ce qu'ils crient en cœur "développez !".
    On leur greffent des puces qui envoient des bips dans leurs oreilles, même quand ils regardent starwars ou american snipper au cinéma.
    je ne sais pas trop si c'est du lard ou du cochon, du cirage de pompe ou des railleries
    en tout cas dans mon cas même si j'essaye de manger bio je suis pas un fan de cinéma (en tout cas à aller aux premières) mais un grand lecteur (1 à 2 livres / semaine) quant à la puce greffée , dommage c'est pas encore sur le marché

    enfin et surtout, j'aimerais avoir une précision les fichiers en question ont les noms de champs en 1°ligne ou pas ?
    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

  17. #17
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 556
    Points : 3 936
    Points
    3 936
    Par défaut
    Salut

    @Sergio: j'avais bien compris mais je continue à penser que passer à un SGBD pour ce genre de travail est une solution trop lourde mais comme je n'ai pas tous les détails (environnement technique, comment sont récupérés les fichiers...), c'est difficile de trancher.

    Dès que l'on pose une question, il ne passe pas 5' avant
    qu'une armée de cuirassiers chevronnés interviennent, tous avec des titres
    ronflants bardés d'étoiles qui nous bombardent une dizaine de solutions avec très peu d'erreurs de code.
    C'est vrai qu'on en attend pas autant ...

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  18. #18
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    eh bien dit donc, les petits loups, pas facile de se faire comprendre,
    mais peut-être est ce de ma faute..

    je ne sais pas trop si c'est du lard ou du cochon, du cirage de pompe ou des railleries
    rien de tout ça SergioMaster..
    c'était pour dire du bien des intervenants mais sans le cirage, ni le cochon, ni les railleries mais avec mon style bien à moi..

    pour en revenir à mon problème et pour simplifier, voici un bout de code
    qui ne plante pas mais qui ne fait rien..
    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
     
    procedure TForm1.cxButton4Click(Sender: TObject);
    var
      OneTable: string;
    begin
      IBOQTreatement.IB_Transaction := IB_Transaction1;
      IBOQTreatement.IB_Connection := IB_Connection1;
      IB_Connection1.Path := 'LocalHost:' + 'MyUSER';    // MyUSER, c'est mon alias firebird sur une base LOCALE
      IB_Connection1.Database := 'LocalHost:' + 'MyUSER';
      IB_Connection1.Username := 'SYSDBA';
      IB_Connection1.Password := 'masterkey';
      if not IB_Connection1.Connected then
        IB_Connection1.Connect; // la connexion marche bien..
      OneTable := 'TEST';
      with IBOQTreatement.SQL do
      begin
        close;
        clear;
        IBOQTreatement.SQL.Text := 'CREATE TABLE ' + OneTable + ' ' + '(CODETEST INTEGER DEFAULT 0 NOT NULL);';
        IBOQTreatement.ExecSQL; // pas de plantage , mais pas de table de créée !
      end;
    end;
    por qué?

    je pense qu'on devrait avancer en faisant comme ça.

    cantador

  19. #19
    Membre confirmé Avatar de cantador
    Homme Profil pro
    Chef de projet
    Inscrit en
    Mars 2006
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mars 2006
    Messages : 569
    Points : 484
    Points
    484
    Par défaut
    je viens de trouver..

    j'avais oublié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      IB_Transaction1.AutoCommit := true;

  20. #20
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    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 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Re @cantador c'est surtout à cette question qu'il faudrait me répondre
    Citation Envoyé par SergioMaster Voir le message
    enfin et surtout, j'aimerais avoir une précision les fichiers en question ont les noms de champs en 1°ligne ou pas ?
    @e-ric
    je continue à penser que passer à un SGBD pour ce genre de travail est une solution trop lourde mais comme je n'ai pas tous les détails (environnement technique, comment sont récupérés les fichiers...), c'est difficile de trancher.
    on est d'accord, c'est plutôt confus il faut se souvenir des posts de cantador dans différentes discussions pour entre-apercevoir l'ensemble !

    si on en revient à la finalité dans cette discussion
    faire apparaître cette fusion dans un Grid disposant des fonctionnalités tris, filtres export etc..
    je passerais plutôt par un StringGrid, je ferais vraiment un processus de fusion de fichier. C'est à dire lire séquentiellement le fichier de la Base Firebird et le fichier CSV, pour le fichier Firebird pas de problème pour obtenir le tri ne serait-ce que par une requête avec ORDER BY pour le fichier CSV par contre .... si le tri sur le champ commun est fait en amont pas de soucis sinon croisons les doigts que celui d'un TStringList fonctionne !

    Comment je vois les choses dans ce cas de figure ?
    un Query sur la table FireBird order by le Champ
    un TStringList qui charge le CSV (avec les bonnes propriétés)
    une boucle while not eof qui charge le tableau avec une lecture des 2 fichiers en concordance (je doit encore avoir des schémas de programmation de ce type dans mes cours , aussi bien ceux que j'ai suivi que ceux que j'ai donné )

    ici je passe par une stringgrid, si l'on veut vraiment faire cela par fichier (et utiliser un DBGrid) on peut aussi passer par une table temporaire (pas Firebird, je pense plutôt à une table mémoire comme KBMemTable)

    Bien sur avec XE10 ou plus exactement avec les dernières versions de Firedac je pourrais proposer d'autres solutions plus orientés Base de Données , tout dépend si la table CSV n'est traiter qu'une seule fois ou doit être garder dans la BDD

    la différence avec Anapurna : aucune lui passe directement par un tableau moi j'ai simplement noter qu'il fallait un visuel d'où la proposition de stringgrid
    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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Fusionner des fichiers javahelp
    Par tchize_ dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 22/07/2009, 15h30
  2. [WD14] Fusionner des fichiers .fic
    Par buzz68180 dans le forum WinDev
    Réponses: 1
    Dernier message: 27/05/2009, 23h47
  3. lire et écrire dans des fichiers différents
    Par jane40 dans le forum MATLAB
    Réponses: 13
    Dernier message: 13/01/2009, 21h30
  4. [Log4j] Problème d'écriture dans des fichiers différents
    Par pathfinder06 dans le forum Logging
    Réponses: 5
    Dernier message: 14/04/2008, 11h12
  5. Fusionner des fichiers .mat
    Par zax469 dans le forum MATLAB
    Réponses: 1
    Dernier message: 07/04/2008, 10h34

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