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. #81
    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

    pour les string il faut quoter(") la variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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;
    @+ 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

  2. #82
    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 ton aide cependant je me suis complètement planté c'était pas un update que je devais faire mais un insert

    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('insert into tparticiper (idcourse, idcheval, numattribue) values (');
            sql.add((dbnumcourse.text)+',');
            SQL.Add('select idcheval from tchevaux where nomcheval='+ quotedstr(listechevaux.text)+',');
            sql.add((enum.text)+')');
            showmessage(sql.text);
            execsql;
          end;
    Apparemment ça bloque sur l'élément select. Il n'est pas possible de faire un select dans un insert ou bien je fais une erreur quelque part?

    http://djvlad.free.fr/code.JPG <<< requête sql.

    Et l'erreur se trouve sur l'élément select ligne 3 avec comme message Utilisation incorrecte du mot-clé.

    Merci de bien vouloir me répondre.

  3. #83
    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

    fait plutot un truc comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    with dm.queryExe do
          begin
         sql.clear;
            sql.add('insert into tparticiper (idcourse, idcheval, numattribue) ');
            sql.add('select '+dbnumcourse.text+', idcheval ,'+ enum.text +);
            sql.add(' from tchevaux where nomcheval='+ quotedstr(listechevaux.text));
            showmessage(sql.text);
            execsql;
          end;
    @+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

  4. #84
    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
    Ca marche nickel merci. Je suis bien content d'avoir appris une nouvelle façon de faire.

    Juste pour information c'est le code que j'avais développé mais étrangement le premier select me renvoyait toujours la valeur 1 peu importe le cheval sélectionne. J'aimerais savoir pourquoi juste par curiosité.

    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
    sql.clear;
            SQL.Add('select idcheval from tchevaux where nomcheval='+ quotedstr(listechevaux.text));
            execsql;
            open;
            showmessage (sql.text);
            truc:= dm.tablechevaux.fieldbyname('idcheval').asstring;
            showmessage (truc);
            sql.clear;
            sql.add('insert into tparticiper (idcheval, numattribue) values (');
            sql.add((truc)+',');
            //sql.add((dbnumcourse.text)+',');
            sql.add((enum.text)+')');
            showmessage(sql.text);
            execsql;
            open;
    Merci de répondre.

  5. #85
    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

    pourtant je ne voi rien d'etrange mis a part quelque detail
    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
    sql.clear;
            SQL.Add('select idcheval from tchevaux where nomcheval='+ quotedstr(listechevaux.text));
            execsql;//apres un select pas besoin de execsql
            open;
            showmessage (sql.text);
            truc:= dm.tablechevaux.fieldbyname('idcheval').asstring;
            showmessage (truc);
            sql.clear;
            sql.add('insert into tparticiper (idcheval, numattribue) values (');
            sql.add((truc)+',');
            //sql.add((dbnumcourse.text)+',');
            sql.add((enum.text)+')');
            showmessage(sql.text);
            execsql;
            open;// apres un update ,insert et delete ne pas faire de open
    @+ 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

  6. #86
    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
    Ok merci.

    J'ai un petit problème qui nécessite votre aide.
    Voici le code qu'il y a derrière le bouton supprimer pari.
    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
    21
    begin
    if (messagedlg('Etes-vous sur de vouloir supprimer ce pari?',mtconfirmation,[mbok,mbcancel],0)=mrok) then
      begin
     with dm.queryexe do
       begin
        sql.clear;
        sql.add('delete from tparier ');
        SQL.Add('where idTickets='+quotedstr(dbticket.text));;
        ExecSQL;
        showmessage(sql.Text);
        close;
       end;
     with dm.queryexe do
       begin
        sql.clear;
        sql.add('delete from ttickets ');
        SQL.Add('where idTickets='+quotedstr(dbticket.text));
        ExecSQL;
        close;
       end;
      Dm.tTickets.Refresh;
    Quand je clique dessus, ça supprime les données de la table ttickets mais pas les données relatives à ce ticket qui se trouvent dans la table tparier. Pourtant le code me semble bon et idtickets est bien la clé primaire de la table tparier.
    A mon avis l'erreur est tout bête mais impossible de mettre le doigt dessus.

    Merci de bien vouloir m'apporter votre aide.

    edit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.text:= ( 'select idcheval from tparticiper where idcheval =(select idcheval from tchevaux where nomcheval= ' +quotedstr(listechevaux.text) +')' + ' and idcourse = '+(dbnumcourse.Text));
    Deuxième petit problème, y a mon dbcheckbox qui me fait des trucs bizarres au lancement du prog. Il est grisé donc je dois cliquer deux fois pour changer de valeur juste après le lancement lancement et ca me joue des tours.


    Merci de bien vouloir m'apporter votre aide.






    Au passage, j'ai réussi à passer ça du premier coup, c'est la première fois que j'y arrive du premier coup et je suis trop content.

  7. #87
    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,

    je ne sais pas si c'est ca mais il me semble que tu n'as pas ajouter de :

    à la fin de la procedure DELETE de tParier. ce qui ne met pas à jour l'affichage de la table.

    Pour le deuxième probleme, le DBCheckbox il doit etre lié à un champs boolean.
    Si ce champs est vide la case et grisée. mais il faut faire attention car si tu le manipule il met automatiquement la table liée en mode edition et la tu travail directement sur la table.

    A+++ et bonne chance pour la suite

  8. #88
    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
    Bonsoir,

    je ne sais pas si c'est ca mais il me semble que tu n'as pas ajouter de :

    à la fin de la procedure DELETE de tParier. ce qui ne met pas à jour l'affichage de la table.

    Pour le deuxième probleme, le DBCheckbox il doit etre lié à un champs boolean.
    Si ce champs est vide la case et grisée. mais il faut faire attention car si tu le manipule il met automatiquement la table liée en mode edition et la tu travail directement sur la table.

    A+++ et bonne chance pour la suite
    Merci de ta réponse mais pour ce qui est du delete, le refresh ne change rien car quand je vais dans la table elle même par le gestionnaire de base de données je vois que les paris liés aux tickets sont encore la.

    Et tant qu'à faire j'ai un autre problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sql.text:= ( 'select idcheval from tparticiper where posarrivee>0 and idcourse = ' +(dbnumcourse.text));
    Ce code est censé me donner le nombre d'enregistrement dans udans la table tparticiper pour une course bien précise ou la possarrivée est différente d'un vide en fait, en gros ou elle n'est pas encore définie. Mais à chaque fois elle me renvoie juste le nombre d'enregistrement dans la table tparticiper pour la course précisé. Pourtant le code me semble bon.

  9. #89
    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,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     sql.text:= ( 'select idcheval from tparticiper where posarrivee>0 and idcourse = ' +(dbnumcourse.text));
    Ce code est censé me donner le nombre d'enregistrement dans udans la table tparticiper pour une course bien précise ou la possarrivée est différente d'un vide en fait, en gros ou elle n'est pas encore définie. Mais à chaque fois elle me renvoie juste le nombre d'enregistrement dans la table tparticiper pour la course précisé. Pourtant le code me semble bon.

    Edit: Dans les trucs étranges avec le dbcheckbox selon les courses il sera coché ou décoché. Comment faire pour régler ca?
    si tu cherche a avoir les enregistrements qui ont une position d'arrivée ta requette fonctionne.

    pour le DBcheckbox, il faut imperativement qu'il soit lié a un champs boolean qui doit etre calculé s'il n'existe pas dans la structure de tes tables.


  10. #90
    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
    Re,



    si tu cherche a avoir les enregistrements qui ont une position d'arrivée ta requette fonctionne.

    pour le DBcheckbox, il faut imperativement qu'il soit lié a un champs boolean qui doit etre calculé s'il n'existe pas dans la structure de tes tables.

    Erf j'ai compris mon erreur. Je suis allez chercher le compte dans ma table tparticiper au lieu de mon queryexe.

    Comme quoi j'apprends!

    Merci comme d'hab gui187. A demain pour de nouvelles aventures

  11. #91
    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
    tu cherche a faire quoi avec la requete j'ai pas tout compris.

    tu peux preciser un peu Stp

  12. #92
    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
    With dm.queryExe do
     begin
       sql.clear;
       sql.text:= ( 'select posarrivee from tparticiper where posarrivee > 0 and idcourse = ' +(dbnumcourse.text));
       open;
       compteur2:= ( dm.queryExe.recordcount +1);
     end;
    En fait c'est pour classer mes chevaux dans l'ordre d'arrivée quand je double clique dessus. J'avais mis un bête compteur au début mais ça posait des problèmes si je quittais le programme sans donner une position d'arrivée à tout les chevaux. Car quand je relançais le programme mon compteur était de nouveau à 0 et je pouvais avoir plusieurs chevaux avec la position d'arrivée 1 par exemple. Alors qu'avec ça je suis sur que deux chevaux ne pourront jamais finir à la même position.

    Bonne nuit.

  13. #93
    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,

    Comment faire pour changer le champ qui décide de l'ordre des enregistrements dans une dbgrid?

    Et le chantier de la soirée le voici.

    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
     with dm.queryExe do
    begin
      sql.clear;
      sql.add('select idcheval from tparier where (idtickets='+ (dbticket.text) +')   and (posarrivee between 1 and 3)');
      showmessage (sql.text);
      open;
    end;
     
    with dm.queryexe2 do
    begin
      sql.clear;
      sql.add('select idcheval from tparticiper where (idcourse='+ (dbnumcourse.text) +') and (posarrivee between 1 and 3)');
      showmessage (sql.text);
      open;
    end;
    Ce code me sert à récupérer les id des chevaux positionnés de 1 à 3 dans la table tparier (pronostiques du parieur donc) et la deuxième partie me sert à récupérer les id des chevaux positionnés de 1 à 3 dans ma table tparticiper (le classement de la course donc).
    Le code me semble correct ce que je voudrais savoir c'est comment comparer les deux résultats pour savoir premièrement s'ils correspondent parfaitement dans l'ordre, dans le désordre ou ne correspondent pas.

    En gros comment comparer les deux résultats?

    Merci de me répondre.

  14. #94
    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
    bonjour,

    moi je ferai une routine sur les trois paris de la table tTickets pour savoir si le cheval jouer est dans l'arrivée.

  15. #95
    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
    bonjour,

    moi je ferai une routine sur les trois paris de la table tTickets pour savoir si le cheval jouer est dans l'arrivée.
    Salut gui187,

    Je vais laisser tomber cette partie, je dois le rendre demain et j'ai plus le temps de m'y attarder. A part ça le programme est bon et très bien sécurisé.

    Mais si tu pouvais juste me dire comment je peux changer la colonne qui va classer les données dans ma dbgrid. En gros je veux que mes chevaux soient classés dans ma dbgrid sur la colonne posarrivee.

    Juste ça et c'est fini.

  16. #96
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Tu peux éventuellement jouer sur la propriété IndexFieldNames de ta TTable en lui spécifiant le nom de la colonne par laquelle il faut trier les enregistrements.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  17. #97
    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 Aka Guymelef Voir le message
    Tu peux éventuellement jouer sur la propriété IndexFieldNames de ta TTable en lui spécifiant le nom de la colonne par laquelle il faut trier les enregistrements.
    Merci de ta réponse mais ça me dit pas d'index pour le champ posarrivee.

  18. #98
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Ha oui effectivement, si tu l'appliques sur un TTable il faut que tu créés l'index en base de données pour pouvoir l'appeler après en code Delphi.
    La FAQ - les Tutoriels - Le guide du développeur Delphi devant un problème

    Pas de sollicitations techniques par MP -

  19. #99
    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,

    Ok merci pour ton aide guymelef.

    Il y a aussi un truc chelou, c'est que quand j'ouvre mon programme avec delphi on peut voir les données dans la form alors que le prog n'est même pas lancé.
    Qu'est ce que ça peut être?

    Merci de me répondre.

  20. #100
    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

    si ton dbgrid est attaché à une requette il te faut mettre un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "order by  [DESC,ASC] monchamp"
    à la fin de ta requette

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

+ 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, 08h41
  2. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00
  3. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  4. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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