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 :

Mise à jour auto des champs liés


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut Mise à jour auto des champs liés
    Salut

    Je suis en train de faire mes pas en Delphi…


    J’ai crée 2 tables Paradox : tblEleve (ElvNum, ElvNom, ClaNum#) et tblClasse (ClaNum, ClaNom)

    Le pb est simple à expliquer ; j’ai 2 fiches : quand je modifie ma table Classe (par son champ ClaNum) et que je vais voir les enregistrements de la table Eleve, la mise à jour automatique n’est pas effectuée dans mon champ ClaNum dans cette fiche Eleve – l’ancienne valeur demeure toujours ; sachant que j’ai utilisé le composant dbLookUpComboBox pour ce champs dans ma fiche Eleve

    S’il vous plait comment puis je faire pour résoudre cette logique ?

    Merci d’avance

  2. #2
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Points : 115
    Points
    115
    Par défaut
    Essyé de mieux nous expliqués car votre question est male articulée!!!

    vous avais un problème dans le maitre Détail ou bien dans un champ de référence.

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut Mise à jour auto des champs liés
    Merci
    C’est un champ de référence du coté de la table Fille (tblEleve) : fiche Eleve

    Quand je modifie une classe dans la fiche/table Classe (tblClasse), et que je repartais lister mes enregistrements sur les élèves (Fiche Eleve), le champ de référence n’est pas mis à jour automatiquement : je vois donc ces enregistrements (ma listing élève) porter dans le champ de référence l’ancienne valeur !

    @+

  4. #4
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Bonjour ,
    c'est quoi le SGBD ?
    tes tables sont reliées en maitre/détail (avec datasource,...) ?
    et elle sont ouvertes en méme temps ?
    le Dblookup sert à afficher un ou plusieurs enregistrements liés à un ensemble de donnée ,c'est sur ce dernier qu'il faut le rafraichissement .

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut Mise à jour auto des champs liés
    Mon SGBD c’est Paradox. J’ai crée mes tables en Paradox (tblEleve + tblClasse)
    Elles sont reliées en maître/détail (avec datasource,...)
    Les tables/fiches ne sont pas ouvertes en même temps
    Le champ de référence qui est bien sûr sur la fiche Elève est un dbLookUpComboBox (car ce composant m’affiche un bouton fléché par lequel je peu cliquer et qui déroule une liste des données liées – dans mon cas il me liste toutes les classes) ….

    A bientôt !

  6. #6
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    oui ,le lookup recupere toutes les classes ,mais celle qui se trouvent déja dans la base (donc tu dois ouvrir la table eleve et mettre à jours manuellement )derouler la lookup pour affecter la nouvelle classe ,
    je ne connais pas bcp paradox mais je pence qu'il n'existe pas un mecanisme pour remettre les champ de liason automatiquement (Foreign Key sous interbase)
    je pence que si tu ouvre les 02 tables en meme temps ça ne resoudras pas le pb car tu dois editer la 02 table eleve ,à moins que tu implemente une requete qui ,au moment de la sauvgarde de ta table classe remet à jour ta table eleve (juste une idée) .

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut Mise à jour auto des champs liés
    ok !

    Satisfait du fait que vous ayez bien compris mon problème, cependant je fais l’analogie avec Access – je viens de Access et je suis en train de migrer vers Delphi.
    En Access pendant la création des tables au niveau des relations il existe un mécanisme automatique qui permette la mise à jour en cascade et la suppression en cascade

    Si vraiment avec Delphi il en est comme vous m’expliquer (c a d la démarche manuelle) c’est vraiment pénible de mettre à jour une liste de 500 Elèves par exemple quand l’utilisateur se serait trompé au départ sur l’orthographe de la Classe – car la modification d’une classe va nécessiter de mettre à jour manuellement une longue liste de 500 Eleves du coté de la Fiche Eleve – voyez-vous ? c’est vraiment pas pratique ! Ah les BDD avec Delphi ???!!!

    J’espère encore en une solution autre si possible

  8. #8
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    c’est vraiment pénible de mettre à jour une liste de 500 Elèves par exemple quand l’utilisateur se serait trompé au départ sur l’orthographe de la Classe – car la modification d’une classe va nécessiter de mettre à jour manuellement une longue liste de 500 Eleves du coté de la Fiche Eleve
    Non ,attent tu parle de la mise à jour de la table classe ,mais la table a une clé Classe_ID ,celle que tu vas mettre dans la table eleve , et qui ne change pas , je ne vois pourquoi en changeant le nom de la classe ou autre information tu vas changer dans la table eleve ;
    les deux tables sont reliées entre elle avec la clé de la classe et la clé est naturellment invisible pour l'utilisateur

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    evidemment, la liste déroulante est mise à jour automatiquement du coté de la table/fiche Eleve, le pb c'est qd je fais le parcour des enregistrements Eleves dont j'avais saisie la classe avant la mise à jour, la valeur qui se trouve ds le champs n'est pas mise à jour automatiquement. c qd je clique pour voir le contenu de ma liste deroulante elle est mis à jour.

    c'est au moment de la lecture des anciens enregistrements que les anciennes valeurs saisies auparavant dans mon dbLookUpComboBox (champ de liaison) du coté fiche Eleve ne change pas ou ne se met pas automatiquement à jour (bien que le contenu de ma liste déroulante est correctement mise à jour)

  10. #10
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    evidemment, la liste déroulante est mise à jour automatiquement du coté de la table/fiche Eleve, le pb c'est qd je fais le parcour des enregistrements Eleves dont j'avais saisie la classe avant la mise à jour, la valeur qui se trouve ds le champs n'est pas mise à jour automatiquement. c qd je clique pour voir le contenu de ma liste deroulante elle est mis à jour.
    ah ok , pour la liste c'est normal qu'elle retrouve les nouvelles classes je pence q'elle est conncter à la table des classes , moi je pence plutot à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select Nom_eleve,..._eleve , Nom_Classe from eleve,classe 
    where eleve.classe=classe_ID
    tu ne stock pas le nom de la classe dans la table des eleves (la classe est une entitée apart) ,j'épere que je ne suis pas passer à coté de la plaque

  11. #11
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    107
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 107
    Points : 115
    Points
    115
    Par défaut
    Je croie avoir compris votre problème essaye de me suivre ici
    je vais vous poser une question, Esque le champ de référence Dans la table1 et dans la table2 est de même type ?
    Car si il n'est pas de même type la référence ne fonctionne pas !!!!
    Vérifier votre Structure des table est réspecter les types et les taille des champs
    Abien tot

  12. #12
    Membre averti
    Avatar de Hauwke
    Inscrit en
    Septembre 2005
    Messages
    329
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 329
    Points : 400
    Points
    400
    Par défaut
    Bonjour,

    Citation Envoyé par tleboukaka
    ok !

    Satisfait du fait que vous ayez bien compris mon problème, cependant je fais l’analogie avec Access – je viens de Access et je suis en train de migrer vers Delphi. En Access pendant la création des tables au niveau des relations il existe un mécanisme automatique qui permette la mise à jour en cascade et la suppression en cascade

    Si vraiment avec Delphi il en est comme vous m’expliquer (c a d la démarche manuelle) c’est vraiment pénible de mettre à jour une liste de 500 Elèves par exemple quand l’utilisateur se serait trompé au départ sur l’orthographe de la Classe – car la modification d’une classe va nécessiter de mettre à jour manuellement une longue liste de 500 Eleves du coté de la Fiche Eleve – voyez-vous ? c’est vraiment pas pratique ! Ah les BDD avec Delphi ???!!!

    J’espère encore en une solution autre si possible
    Question qui va vous paraître trés impertinente, mais pourquoi ne pas rester sous Access?
    J'entends, par là, créer une base Access dans Access ou par le code en Delphi, ensuite faire le lien application/données à l'aide des composants "ADO" de la palette Delphi (Dans le cas d'une version légére de Delphi voir les composants "KADAO") Ainsi, vous continuez d'exploiter votre réserve d'expertise sous Access tout en bénéficiant des avancées d'un LG4 comme Delphi. Dans l'hypothése où vous auriez des bases de données "toutes faîtes" sous Access rien ne vous empêche plus de rapatrier vos structures et/ou données dans votre nouvelle application. Qui plus est, dans le cadre d'un partage des accés à vos données, je vous assure qu'il vous sera plus facile de débuter la sécurité des bases de données sous Access que sous Paradox...

    Ne confondez pas Access qui est un fournisseur de données et Delphi qui est un IDE intégrant une variante du langage Pascal. Il s'agit, véritablement, de deux choses aussi différentes que le Latin et le Grec. Delphi peut collaborer avec n'importe lequel ou presque des fournisseurs de données actuellement présent sur le marché mais aucun de ces fournisseurs ne peut se subsituer à un langage de développement quel qu'il soit.

    Cordialement,
    Hauwke

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par tleboukaka
    Salut

    Je suis en train de faire mes pas en Delphi…


    J’ai crée 2 tables Paradox : tblEleve (ElvNum, ElvNom, ClaNum#) et tblClasse (ClaNum, ClaNom)

    Le pb est simple à expliquer ; j’ai 2 fiches : quand je modifie ma table Classe (par son champ ClaNum) et que je vais voir les enregistrements de la table Eleve, la mise à jour automatique n’est pas effectuée dans mon champ ClaNum dans cette fiche Eleve – l’ancienne valeur demeure toujours ; sachant que j’ai utilisé le composant dbLookUpComboBox pour ce champs dans ma fiche Eleve

    S’il vous plait comment puis je faire pour résoudre cette logique ?

    Merci d’avance
    Problème récurent, il faut valider la modification faites avec le DbLookUpComboBox

    Changer la valeur dans une table avec un DbLookUpComboBox met la table en mode Edition, si on ne valide pas avec la méthode Post, les données sont perdues.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    Salut


    Réponse : avec Access l'exécution de me requêtes devenait de plus en plus long qd dans ma bdd des nouveaux enregistrements étaient ajoutés. Plus il y a des tables dans une bdd Access plus lourde ou volumineuse devient mon application.
    access ne me fournit pas trop de composants pour développer une application vraiment profetionnelle, bref Access c'est Microsoft - c'est pas Borland...

    Pourquoi je ne pourrai pas faire une application de bdd 100% Delphi ! pourquoi serais je obligé d'utiliser des produits d'autres firmes autres que Borland/CodeGear. Pourquoi serais je obligé de faire recours à Access ou SQL Server ou mySql. Delphi ne se suffit pas à lui-même ? Je ne souhaiterai pas quand me dirige vers Access pour la solution à mon problème.
    quelque part ce n'est pas du client/server que je vais faire pour que je pense à monter ma bdd sous Borland INTERBASE - j'ai fais recour à Paradox

    C'est pour dire que je vais encore garder espoir - que vous allez sans douter me proposer une astuces pour m'en sortir

    Merci encore

  15. #15
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 490
    Points : 2 752
    Points
    2 752
    Billets dans le blog
    10
    Par défaut
    Le problème est plus simple qu'il n'y paraît. Reprenons au départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblEleve (ElvNum, ElvNom, ClaNum#) et tblClasse (ClaNum, ClaNom)
    tu mets une clé primaire sur ClaNum dans tblClasse
    tu mets une clé primaire sur ElvNum dans tblEleve
    tu mets une clé secondaire sur ClaNum dans tblEleve
    si déjà tu as fait celà tu n'es pas loin du résultat final. La suite est dans le fichier zip ci-joint.
    Les fichiers val sont liés à l'intégrité référentielle que j'ai posé entre les deux tables.

  16. #16
    Membre régulier
    Inscrit en
    Septembre 2005
    Messages
    192
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 192
    Points : 90
    Points
    90
    Par défaut
    Merci ALWEBER

    j'avais fais cette logique dès le début

    tblEleve (ElvNum, ElvNom, ClaNum#) et tblClasse (ClaNum, ClaNom)
    tu mets une clé primaire sur ClaNum dans tblClasse
    tu mets une clé primaire sur ElvNum dans tblEleve
    tu mets une clé secondaire sur ClaNum dans tblEleve
    si déjà tu as fait celà tu n'es pas loin du résultat final.
    je vais prendre du temps pour voir le fichier zip dont vs avez eu l'amabilité de faire pour moi

    @ +

Discussions similaires

  1. [WD12] Mise à jour auto des fichiers de transactions
    Par zouzoukha dans le forum WinDev
    Réponses: 5
    Dernier message: 03/11/2011, 08h19
  2. [AC-2000] Mise à jour automatique des champs d'une table
    Par Seric31 dans le forum Modélisation
    Réponses: 1
    Dernier message: 29/07/2010, 17h42
  3. Mise à jour automatique des champs d'un formulaire
    Par laurentSc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/03/2010, 14h27
  4. Mise à jour automatique des champs d'un formulaire
    Par laurentSc dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2010, 22h27
  5. [DeskI V5-V6] Mise à jour auto des données dans la colonne variation
    Par lenka33 dans le forum Débuter
    Réponses: 17
    Dernier message: 31/08/2009, 12h09

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