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

  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
    9 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 496
    Points : 23 082
    Points
    23 082
    Billets dans le blog
    14

    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

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Berlin, Tokyo) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    2 707
    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 707
    Points : 4 353
    Points
    4 353

    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 571
    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 571
    Points : 5 951
    Points
    5 951

    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
    9 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : janvier 2007
    Messages : 9 496
    Points : 23 082
    Points
    23 082
    Billets dans le blog
    14

    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

    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Berlin, Tokyo) et peut être quelques autres
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  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, 12h08
  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, 14h42
  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, 17h30
  4. Réponses: 2
    Dernier message: 25/09/2006, 13h04
  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, 16h58

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