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 :

pb avec des clés sur un formulaire


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut pb avec des clés sur un formulaire
    bonjour
    je suis en train de faire un formulaire pour remplir une BDD (access)
    sur celui-ci, j'ai mis les champs (numeroPin, NumeroEssai) issus d'une table de jonction (clé composée de ces deux champs)
    seulement je ne pouvais écrire dedans que si les tables reliées contenaient déjà les champs
    donc j'ai placé sur ce même formulaire les champs numeroPin et NumeroEssai mais issus des deux autres tables. j'ai mis ces tables avec MasterSource la table de jonction
    ça marche sauf que je ne peux pas rentrer 2 fois le même numéro de pin ce qui est logique pour la table pin (c'est la clé primaire) sauf que dans la table de jonction je devrais pouvoir puisque la clé est composée de NumeroPin+NumeroEssai
    donc je n'arrive pas à résoudre ce pb, peut-etre que je n'ai pas la bonne méthode, est-ce qu'il faut passer plutot par du code? si quelqu'un sait comment faire...
    merci

  2. #2
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    Si j'ai bien compris la situation, tu as une table d'association (T3) entre 2 autres tables T1 et T2 (relation n - n).
    Tu veux créer un enregistrement dans T3 en sélectionnant un enregistrement de T1 et un autre dans T2.
    Tu peux peut-être utiliser des DBLookupComboBox...

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    Citation Envoyé par cmen76
    Si j'ai bien compris la situation, tu as une table d'association (T3) entre 2 autres tables T1 et T2 (relation n - n).
    oui c'est bien ça

    Citation Envoyé par cmen76
    Tu veux créer un enregistrement dans T3 en sélectionnant un enregistrement de T1 et un autre dans T2.
    Tu peux peut-être utiliser des DBLookupComboBox...
    non, je l'ai fais déjà pour qqes tables où il n'y a pas trop d'enregistrements, mais là je ne meux pas ça fera trop long. et puis il faut d'abord remplir les autres pour que l'enregistrement à choisir existe, ça va etre galère pour les utilisateurs...
    ce que je voudrais c'est créer un enregistrement dans T3 et que les autres tables se mettent à jour en fonction de ceci.
    pour l'instant c'est ce qui se passe sauf pour cette histoire de clé

  4. #4
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    je pense que peut-etre en faisant une procedure sur OnChange (ou autre) des éléments de T3 avec une requete qui remplirait les tables lorsque les clés n'existent pas ça pourrait marcher
    mais c'est un peu bof peut-etre
    je me demande si il n'y a pas une meilleure démarche

  5. #5
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    et pourquoi pas, dans ce cas, sur le beforepost de T3, vérifier l'existence des enregistrements dans T1 et T2 avec création si nécessaire ?

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    oui bonne idée, je ne connaissais pas
    ^^merci^^ pour ton aide je pense y arriver là


    (donc je fais ça à peu près : )

    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
    begin
      MainForm.ADOConnection1.Open;
      With ADOQuery3 Do
      begin
      SQL.clear;
      SQL.Text := 'select NumeroEssai from Essai where NumeroEssai = ' +quotedStr(DBEdit11.Text);
      open;
      EssaiExiste := ADOQuery3.RecordCount
      end;  showMessage(intTostr(EssaiExiste));
            if EssaiExiste <> 0 then exit
              else
                begin
                with ADOQuery3 do
                  begin
                  SQL.clear;
                  SQL.Text := 'INSERT INTO Essai (NumeroEssai) Values ('+quotedStr(DBEdit11.Text)+')';
                  execSQL;
                  end;
                end;
    end;

  7. #7
    Membre averti
    Profil pro
    xxxxxxxxxxx
    Inscrit en
    Juin 2004
    Messages
    308
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : xxxxxxxxxxx

    Informations forums :
    Inscription : Juin 2004
    Messages : 308
    Points : 407
    Points
    407
    Par défaut
    N'oublies pas le close de ton Query après avoir lu le recordcount et avant de tenter de réaffecter le SQL, sinon oui, ça me paraît pas mal.

    Une simple petite remarque néanmoins concernant l'obtention du nombre d'enregistrements ; Il me paraît préférable de le faire calculer par la base (et donc le serveur, en client/serveur), plutôt que de rapatrier un dataset complet rien que pour connaître le nombre d'enregistrements.
    De plus, selon le driver de base de données utilisé, il arrive (ça m'est arrivé) que le recordcount ne soit pas viable.
    Donc, solution standard : utiliser le select count...

  8. #8
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 75
    Points : 59
    Points
    59
    Par défaut
    ahh.. je vais changer un peu alors ...
    en tous cas merci pour tes conseils cmen76

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/02/2008, 19h04
  2. Paginate avec des conditions sur les clés etrangères.
    Par CeDRiC08 dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 03/07/2007, 09h49
  3. Réponses: 3
    Dernier message: 16/02/2006, 16h58
  4. Réponses: 3
    Dernier message: 10/12/2005, 19h56
  5. Réponses: 1
    Dernier message: 15/09/2005, 11h59

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