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

Bases de données Delphi Discussion :

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


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 109
    Points : 45
    Points
    45
    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 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,
    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"
    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
    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

    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 éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    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 : 4 630
    Points : 10 556
    Points
    10 556
    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 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,

    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"
    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

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 109
    Points : 45
    Points
    45
    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