1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2003
    Messages : 53
    Points : 35
    Points
    35

    Par défaut Même programme pour 2 tables dont une avec un champ supplémentaire

    Bonjour,
    Programmeur de loisirs en Delphi 7 j'ai du rajouter dans une table .dbf locale un champ supplémentaire.
    Après quelques modifications et surtout l'adjonction d'un 7ième champ DataFiels au composant TTable (à l'aide de l'éditeur de collection FieldDefs à la conception), tout fonctionne correctement.
    Sauf que j'aimerais bien pouvoir également exploiter avec ce même programme mes anciennes tables.
    Au lancement de mon programme j'ai bien ajouté un test pour récupérer le nombre de champs et ainsi pouvoir charger l'une ou l'autre version de la table.
    Mais après je suis dans l'impasse, comment faire ?
    J'avais pensé neutraliser le champ ajouté (Table1.Fields[6].Visible:=False ou actualiser (Table1.Fields[6].Visible:=True mais les enregistrements sont alors invisibles pour les anciennes bases.
    Ou y-a-t-il d'autres solutions ?.
    Qui peut m'aider, d'avance merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 552
    Points : 19 958
    Points
    19 958
    Billets dans le blog
    4

    Par défaut

    Bonjour,
    Citation Envoyé par dennler Voir le message
    l'adjonction d'un 7ième champ DataFields au composant TTable (à l'aide de l'éditeur de collection FieldDefs à la conception), tout fonctionne correctement.
    Le problème est là .

    J'avais pensé neutraliser le champ ajouté (Table1.Fields[6].Visible:=False ou actualiser (Table1.Fields[6].Visible:=True mais les enregistrements sont alors invisibles pour les anciennes bases.
    Ou y-a-t-il d'autres solutions ?.
    - l'inverse peut-être, rajouter un champ si "nouvelle base", mais c'est AMHA pas sur la propriété visible qu'il faut jouer

    - ou ne pas déclarer de champs du tout

    - ou encore passer par une Query au lieu d'une table
    ancienne version SELECT COL1,COL2,COL3,COL4,COL5,NULL as COL6 FROM TABLE (à vérifier)
    nouvelle version SELECT COL1,COL2,COL3,COL4,COL5,COL6 FROM TABLEainsi quelque soit la "base" il y aura toujours 6 colonnes donc "déclarables"
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  3. #3
    Membre expert
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 488
    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 : 2 488
    Points : 3 944
    Points
    3 944

    Par défaut

    salut

    regarde par ici
    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

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    juillet 2013
    Messages
    2 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : juillet 2013
    Messages : 2 202
    Points : 4 885
    Points
    4 885

    Par défaut

    Citation Envoyé par SergioMaster Voir le message
    - ou encore passer par une Query au lieu d'une table
    ancienne version SELECT COL1,COL2,COL3,COL4,COL5,NULL as COL6 FROM TABLE (à vérifier)
    nouvelle version SELECT COL1,COL2,COL3,COL4,COL5,COL6 FROM TABLEainsi quelque soit la "base" il y aura toujours 6 colonnes donc "déclarables"
    Il y a plus simple et plus maintenable "SELECT COL1,COL2,COL3,COL4,COL5" + other_columns + " FROM TABLE"

    Et lorsqu'on démarre l'application on détecte le nombre de colonnes (soit avec une propriété SQL soit en faisant une requête avec 6 champs)
    Ceci pour configurer la chaîne other_columns qui est soit vide (5 champs) soit ",COL6"

    Pour les moins il y a une concaténation à chaque requête

    Édit : Après réflexion, c'est une fausse bonne idée parce que même si on peut faire 1 requête pour X versions, il faut quand même faire des traitements en plus lors de la lecture (pour récupérer les nouvelles valeurs)

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    8 552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 8 552
    Points : 19 958
    Points
    19 958
    Billets dans le blog
    4

    Par défaut

    Bonjour,

    pour les requêtes, j'expliquai juste le principe. Plutôt que de passer par la concaténation proposée par foetus je serait passé par 2 constantes contenant les deux SQL indiqués.
    Bien évidemment au design les champs seront déclarés avec la seconde requête et non la première. L'objectif de cette solution était de garder, je vais dire en l'état, les déclarations de champs au design de façon à ne pas "perturber" toute l'application (après tout qu'est-ce qu'un TTable si ce n'est un TQuery moins spécialisé (en fait c'est même comme ça que fonctionne les composants BDE un TTable est transformé en une Query et des requêtes de mises à jour selon les options et les champs déclarés).
    Dennler ne nous écrit pas s'il s'agit juste d'une lecture, ou d'un table en mise à jour (auquel cas il faudrait ajouter un TUpdateSQL rendant la chose un peu plus délicate.
    Une autre solution m'est venue à l'esprit, intervenir sur la table elle-même. Si la colonne n'existe pas ( donc ancienne table) alors la créer et donc avoir la nouvelle structure. "une colonne vide, ça mange pas de pain"
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    mars 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2003
    Messages : 53
    Points : 35
    Points
    35

    Par défaut

    Bonjour,
    J'ai résolu mon problème, lors du test du nombre de champs, j'ai tout simplement rajouté le champ manquant.
    Merci pou tout

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 27/09/2011, 13h08
  2. travailler avec une table dont une de ses colones = DATE
    Par ramanov dans le forum Bases de données
    Réponses: 5
    Dernier message: 10/02/2009, 15h42
  3. Pb pour créer table de jointure avec un attribut
    Par cissou06 dans le forum Ruby on Rails
    Réponses: 0
    Dernier message: 28/05/2008, 18h30
  4. Réponses: 2
    Dernier message: 25/09/2006, 14h04
  5. Copie d'une table entre bases, avec un champs long
    Par LaVaZza dans le forum Oracle
    Réponses: 6
    Dernier message: 18/04/2006, 17h58

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