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 :

Besoin d'aide sur les relations entre mes tables


Sujet :

Bases de données Delphi

  1. #61
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Andry Voir le message
    Il faut casté via
    FieldByName('datecourse').AsString := FieldByName('dateticket').AsString;
    lors de l'affectation;

    A+
    Oui ca j'ai déja fait. Mais c'est lors du transfert de la date que ça pose problème. Si par exemple j'entre mettons 2245 dans la saisie initiale, lorsque je voudrais créer un ticket sur ma course donc lors du transfert des données précédemment introduites çà va me créer une erreur.

    Mettons que je crée une course avec comme données dans le champ datecourse 454231534 (erreur de frappe donc) et qu'ensuite je veuille créer un ticket lié à cette course qui ira chercher cette information pour la mettre dans le champ dateticket mon programme va planter. Il faut qu'à la saisie si le format type date n'est pas respecté, les données ne puissent être introduites.

  2. #62
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Alors la, il faut vraiment que tu effectue la vérification de la saisie avant de valider l'insertion. Sinon gerer les evenements onPostError, beforePost du Dataset correspondant.

    Courage
    On progresse .....

  3. #63
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Merci de tes conseils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with dm.queryexe do
    begin
    sql.clear;
    sql.add('select nomcheval from tchevaux where idcheval=' +dm.tparticiper.fieldbyname('idcheval').asstring) ;
    execsql;
    open;
    end;
    Alors le problème du jour. J'ai un dblookupcombobox qui ajoute l'idcheval à ma table tparticiper. J'aimerais également que le champ calculé nomcheval soit mis à jour. En gros j'ai créé un champ calculé nomcheval pour que le nom du cheval soit aussi implémenté dans la table tparticiper en plus de l'idcheval. Le problème c'est que je n'ai jamais travaillé avec du sql dans les champs calculés et je ne sais pas trop par ou commencer comme souvent d'ailleurs.

    J'ai donc déja pensé au code sql qui me permet de récupérer le nom d'un cheval associé à son id(est-il correct?) Mais je ne sais comment l'appliquer dans l'événement oncalcfield.

    Merci de me répondre.

  4. #64
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    with dm.queryexe do
     begin
     sql.clear;
     sql.add('select nomcheval from tchevaux where idcheval=' +dm.tparticiper.fieldbyname('idcheval').asstring) ;
     execsql;
     open;
     end;
    DM.tparticiper.FieldByName('nomcheval').asstring:=
    dm.tablechevaux.fieldbyname('nomcheval').asstring;
    end;
    Dans mon esprit ça doit être quelque chose comme ça. Mais ca me donne une erreur Utilisation incorrecte du mot clé Elément =.

    Donc on demande de nous donner tous les noms des chevaux dont l'idcheval se trouve également dans la table tparticiper.
    Ensuite ces noms seront enregistrés dans la table tparticiper.

    Je pense que ma logique est bonne quant au reste je supposes qu'il y a des erreurs.

    Merci de m'aider.

    edit: maintenant que j'y pense est-ce que je ne dois pas réserver un tquery pour l'affichage plutôt qu'employer celui pour mes exécutions?

  5. #65
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    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 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    le probleme est que tu doit avoir deux query différent pour pouvoir aller chercher tes element dans l'evenement oncalcfield celui-ci se realisant
    lors de l'ouverture de la premiere query

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    procedure Tdm.TblCalcFields(DataSet: TDataSet);
    begin
      with dm.queryCalcFields do
     begin
     sql.clear;
     sql.add('select nomcheval from tchevaux where idcheval=' + DataSet.FieldByName('idcheval').asstring) ;
     execsql;
     open;
     end;
      DataSet.FieldByName('nomcheval').AsString := dm.queryCalcFields.FieldByName('nomcheval').AsString;
    end;
    ne pas oublier de creer le chps calcule

    sinon il te suffit de faire une requete avec liaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      select TblCOURSES.IDCOURSE,TblCOURSES.IDCHEVAL,TblCHEVAL.NOM
      from TblCOURSES,TblCHEVAL 
      where  TblCHEVAL.IDCHEVAL = TblCOURSES.IDCHEVAL
      and TblCOURSES.IDCOURSE =
    tu peut aussi selon la base de données utiliser les innerjoint



    @+ Phil

    edit : il est effectivement préférable de séparer les query de command de celle qui servent à l'affichage
    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

  6. #66
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Merci de ta réponse.

    Le message qu'il me renvoie est le même qu'avec ma méthode cad utilisation incorrecte du mot clé. Elément: = Numéro de ligne 1.

    Quelle peut en être la cause?

  7. #67
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    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 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    le chps "nomcheval" existe t'il dans la requette d'origine ?

    @+ Phil
    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

  8. #68
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par anapurna Voir le message
    salut

    le chps "nomcheval" existe t'il dans la requette d'origine ?

    @+ Phil
    Qu'est ce que la requête d'origine?
    A part ça le champ nomcheval est un champ physique dans ma table tchevaux. Et nomcheval est un champ calculé dans ma table tparticiper.

    edit: Pourquoi Dataset a-t'il remplace les dm.tparticiper?

  9. #69
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 409
    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 409
    Points : 5 799
    Points
    5 799
    Par défaut
    salut

    Qu'est ce que la requête d'origine?
    A part ça le champ nomcheval est un champ physique dans ma table tchevaux. Et nomcheval est un champ calculé dans ma table tparticiper.
    c'est ta table tparticiper
    je pensai que tu utiliser des requettes et pas des table

    as tu essayer d'affecter une valeur string
    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DataSet.FieldByName('nomcheval').AsString := 'test';
    pour voir si comme cela ca marche

    Pourquoi Dataset a-t'il remplace les dm.tparticiper?
    parce que ... non je blague
    si tu regarde la methode oncalcfields tu t'appercois que l'on passe le dataset comme paramettre celui-ci correspondent a la table qui travail
    j'ai pour habitude de travailler de la facons la plus generique possible
    de cette facon meme si je renomme ma table je n'ai pas besoin de renommer tout les dm.tbl..

    @+ Phil
    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

  10. #70
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    En fait j'aimerais que ma table tparticiper continue de s'occuper de l'affichage. Je pensais juste au query pour le calcul afin d'extraire les données utiles et ensuite les faire afficher par mon composant table. Mon query ne peut me servir pour afficher sinon ça rendrait obsolètes les relations master/slave étable par les propriétés mastersource de mes composants table. Enfin je me trompe souvent remarque et t'avais surement déjà compris ce que je voulais faire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with dm.querycalcfields do
     begin
       sql.clear;
       sql.add('select nomcheval from tablechevaux where idCheval=' + dm.tparticiper.FieldByName('idcheval').asstring) ;
       execsql;
       open;
     end;
     dm.tparticiper.FieldByName('nomcheval').AsString := dm.tablechevaux.FieldByName('nomcheval').AsString;
    end;
    Donc voici mon code. Et j'ai essayé d'affecter une valeur string et ça l'a bien affiché dans la dbgrid.
    L'erreur sinon est toujours la même au lancement du programme Utilisation incorrecte du mot clé. Elément: = Numéro de ligne 1.

    J'ai essayé de mettre ce code derrière un événement quelconque du programme en essayant d'afficher le code avec un showmessage mais le programme plante définitivement sur la ligne principale.

  11. #71
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    bonsoir,

    et si je vous proposait une autre approche pour afficher le nom du cheval :

    - faire une requete nommée Querychevaux pour la liste des chevaux avec sa datasource attachée:

    - ensuite on ajoute sur la table tParier un nouveau champs reference avec comme :

    * Champs clé : idcheval
    * Ensemble de données : DsQuerychevaux
    * Champs resultat : nomcheval
    * Clé de reference : idcheval

    et la on ne s'occupe plus avec une tonne de requete pour avoir le nom du cheval dans la DBGrid car paradox fait l'ensemble des calculs en toute transparence et en plus ca ne fait pas d'erreurs

    A++++

  12. #72
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    C'est à dire que je ne peux pas modifier mes bases de données. Leurs structures sont imposées par le professeur et c'est la table participer qui est en cause ici.

  13. #73
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    ce que j'ai expliquer avant ne modifie en rien la structure physique de tes tables. tu ne fait qu'y ajouter un pseudo champs calculé ou tu ne t'embetes pas a faire les procedures d'affichage du nom du cheval.

    cette methode s'applique a toutes les tables tu peux l'appliquer sur la table participer en créant le champs sur celle la.

    si j'ai bien comprit c'est pour l'afficher dans la DBGrid.

    A+++

  14. #74
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par gui187 Voir le message
    ce que j'ai expliquer avant ne modifie en rien la structure physique de tes tables. tu ne fait qu'y ajouter un pseudo champs calculé ou tu ne t'embetes pas a faire les procedures d'affichage du nom du cheval.

    cette methode s'applique a toutes les tables tu peux l'appliquer sur la table participer en créant le champs sur celle la.

    si j'ai bien comprit c'est pour l'afficher dans la DBGrid.

    A+++
    Merci pour ces précisions.
    J'ai farfouillé un peu. Bon premièrement j'ai créé un tquery et un dataset. Je les ai lié a ma table tchevaux.db, j ai mis select * from tchevaux comme requête de base.

    Ensuite pour activer les options dont tu parles il faut aller dans l'éditeur de champs je crois non? Avec les options telles que lookupdataset, lookupresultfield, keyfield?

  15. #75
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    tout a fait,

    quand tu clique pour créer le nouveau champs delphi se charge de remplir toutes ces valeur. un assitant s'affiche plus qu'a appuyer sur ok une fois que tout et rempli.

    Vive l'EDI de delphi..... mdr

    A+++

  16. #76
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Heuuu tu peux détailler un peu plus. Je répète ce que j'ai fait.
    J'ai créé un querycheval et dscheval.
    Ensuite il faut aller sur la table tparticiper et à partir de la?
    Moi je suis allé dans l'éditeur de champ je me suis positionné sur mon champ calculé nomcheval. Ensuite j'ai paramétré keyfield :idcheval. Lookupdataset: tablechevaux. Lookupkeyfield: idcheval et lookupresultfield:nomcheval. Rien ne se fait auto apparemment.
    Mais ca ne fonctionne pas rien ne s'affiche dans le champ nomcheval de ma table tparticiper.

  17. #77
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    re,

    ce n'est pas un champs calculé c'est un champs lookup.

    donc modifie la valeur de la propriété " FieldKind" de ton champs calculé en
    "fklookup" et tu vera les changements

    A+++

  18. #78
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Franchement tu m'épates! Je me casse littéralement le popotin à trouver une solution à base de code sql de machin et la paf je paramètre deux trois trucs et ça passe niquel.Je suis sur le cul .

    Merci je te dois vraiment beaucoup.

    Bonne nuit à toi, bonne nuit tout le monde.

  19. #79
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Août 2008
    Messages : 20
    Points : 24
    Points
    24
    Par défaut
    le tout c'est de se donner un coup de main

    A+++

  20. #80
    Membre à l'essai Avatar de Jenojen
    Inscrit en
    Janvier 2008
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 97
    Points : 17
    Points
    17
    Par défaut
    Bonjour tout le monde,

    Alors le problème du matin c'est qu'en lisant mon exercice je me suis rendu compte que pour ajouter des chevaux à une course je devais impérativement me servir du sql et non de dbedit et dblookup.
    Donc j'ai tenté ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure Tgestionparis.Button1Click(Sender: TObject);
    begin
     with dm.queryExe do
          begin
            sql.clear;
            sql.add('update tparticiper set');
            SQL.Add('idcheval=(select idcheval from tchevaux where nomcheval='+(listechevaux.text)+')');
            sql.add(',numattribue='+(enum.text));
            SQL.add('where idcourse='+dm.tParticiper.fieldbyname('idcourse').asstring);
            showmessage(sql.text);
            execsql;
          end;
    end;
    Voici ce que donne la requête: http://djvlad.free.fr/sqltext.JPG

    Et le message d'erreur me signale"Nom de champ incorrect. Rantanplan. Avec rantanplan comme cheval sélectionné bien sur.Ou est mon erreur?

    Merci de bien vouloir me répondre.

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

Discussions similaires

  1. [Débutant] besoin d'aide sur les web services
    Par Diangelita dans le forum Services Web
    Réponses: 3
    Dernier message: 20/01/2006, 09h41
  2. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 11h00
  3. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 16h43
  4. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 11h16
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 13h19

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