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 :

Parcours d'une table


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut Parcours d'une table
    Bonjour,

    J'aimerais avoir un peux d'aide concernant une procédure de vérification d'une table avant suppression.

    Je travail sous delphi 6 avec un db access et le composant tplanner de tms software.

    Je travail avec 2 tables:

    la table des personnes et la table des réservations. J'aimerais avant suppression d'une personne faire une vérification dans la table des réservations si cette personne a ou pas de réservation.

    Je bloque quelque pars, mais je ne trouve pas où.

    Voici ma procedure:

    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
    22
    23
    24
    25
    26
    procedure TFFicheDetailsPersonne.BtnDeleteClick(Sender: TObject);
    var flag,j, nb, refpers : integer;
     
    begin
      flag := 0;
      refpers := DataMod.QPersonneper_id.AsInteger;
     
     
      Datamod.TSCHEDULE.First;
      nb := datamod.TSCHEDULE.RecordCount;
     
      for j := 1 to nb do
        begin
          if DataMod.TSCHEDULEPERS_ID.AsInteger = refpers then
                begin
                    MessageDlg ('Suppression impossible ! ', mtError,[mbOK],0) ;
                    flag := 1;
                end;
           inc(j);
          datamod.TSCHEDULE.Next;
        end;
     
       if flag = 1 then DataMod.QPersonne.Delete;
       FListPersonne.DBGrid.RefreshData;
      close;
    end;
    Pouvez-vous m'aider?

    MErci

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    bon jour
    un messagedlg dans une boucle imagineé qu'il on'a 100 resrvation a cette personne ..!

    1 - utilisez un filtre pour votre table reservation et tester le nombre d'ocurence dans cette table si est zero supprimer cette personne sinon ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    refpers := DataMod.QPersonneper_id.AsInteger;
    DataMod.TSCHEDULE.filtre  :=   '''pers = ' + inttostr(refpers) + ''''
    DataMod.TSCHEDULE.filtered  := true ;
    if DataMod.TSCHEDULE.RecordCount = 0 then 
    DataMod.QPersonne.Delete;
    else
    MessageDlg ('Suppression impossible ! ', mtError,[mbOK],0) ;
    DataMod.TSCHEDULE.filtered  := false ;
    A+

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2012
    Messages : 111
    Points : 171
    Points
    171
    Par défaut
    vou pouver aussi changer votre code comme suite
    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
    22
    23
    24
    25
    procedure TFFicheDetailsPersonne.BtnDeleteClick(Sender: TObject);
    var flag,j, nb, refpers : integer;
     
    begin
      flag := 0;
      refpers := DataMod.QPersonneper_id.AsInteger;
     
     
      Datamod.TSCHEDULE.First;
      nb := datamod.TSCHEDULE.RecordCount;
     
      for j := 1 to nb do
        begin
          if DataMod.TSCHEDULEPERS_ID.AsInteger = refpers then
                                                flag := 1;
     
           inc(j);
          datamod.TSCHEDULE.Next;
        end;
     
       if flag = 1 then DataMod.QPersonne.Delete else MessageDlg ('Suppression impossible ! ', mtError,[mbOK],0) ;
    ;
       FListPersonne.DBGrid.RefreshData;
      close;
    end;

  4. #4
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Une requête SQL fera l'affaire et evitera tous ces cassements de tête !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Merci a tout les 3 pour votre réponse

    Citation Envoyé par akli_agha Voir le message
    Une requête SQL fera l'affaire et evitera tous ces cassements de tête !
    Peux-tu m'aider a construire cette requête? J'aimerais pouvoir évolué

    The Ditch

  6. #6
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    En espérant qu'Access supporte cette syntaxe.

    Pour Supprimer les personnes qui ont des reservations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL.Text := 'DELETE FROM qPersonne '+
                'WHERE RefPers IN '+
                '      (SELECT PERS_ID FROM TSCHEDULE) ';
    ExecSQL;

    Pour Supprimer les personnes qui n'ont pas des reservations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SQL.Text := 'DELETE FROM qPersonne '+
                'WHERE RefPers NOT IN '+
                '      (SELECT PERS_ID FROM TSCHEDULE) ';
    ExecSQL;
    Il faut quand même se mettre à l'initiation du SQL. Un minimum de connaissance est requis pour ce genre de traitement.
    Même la façon de parcourir votre table n'est pas adéquate. Il fallait utiliser la boucle comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    while not Table1.eof do begin
      //Traitements à exécuter sur le record courant
       :
       :
      Table1.Next;
    end;

  7. #7
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2009
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    Je tiens a remercier pour votre aide.

    J'ai etudié vos propositions, j'ai essayé de trouvé une solution par moi même.

    la 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TFFicheDetailsPersonne.BtnDeleteClick(Sender: TObject);
     var refpers,flag: integer;
         nompers : String;
    begin
      flag := 0;
      refpers := DataMod.QPersonneper_id.AsInteger;
      nompers := DataMod.QPersonneper_nom.AsString + DataMod.QPersonneper_prenom.AsString ;
     
      //showmessage ('id pers ' + inttostr(refpers ));
      //showmessage (nompers);
     
      DataMod.TSCHEDULE.First;
     
      if DataMod.TSCHEDULE.Locate('pers_id', refpers, []) then flag :=1;
      if flag = 1 then
          MessageDlg ('Suppression impossible pour ' + DataMod.QPersonneper_nom.AsString + ' ' + DataMod.QPersonneper_prenom.AsString + #10#30'une réservation a été assigné a ce client. ', mtError,[mbOK],0)
        else
          begin
              datamod.QPersonne.Locate('per_id', refpers, []);
              //Showmessage  (nompers +DataMod.QPersonneper_id.AsString + ' a été supprimé' )   ;
              Showmessage(DataMod.QPersonneper_nom.AsString + ' ' + DataMod.QPersonneper_prenom.AsString + ' a été supprimé !' );
              datamod.QPersonne.Delete;
           end;
     
        FListPersonne.DBGrid.Refresh;
      Close;
     
    end;
    The Ditch

Discussions similaires

  1. Parcours d'une table à partir d'une liste déroulante
    Par mystikgirl30 dans le forum IHM
    Réponses: 4
    Dernier message: 12/04/2007, 11h02
  2. Probléme de parcour d'une table
    Par rootdaoud dans le forum Langage
    Réponses: 3
    Dernier message: 25/12/2006, 13h24
  3. parcour d'une table et calcul date?
    Par dj_techno dans le forum Bases de données
    Réponses: 4
    Dernier message: 25/08/2006, 09h02
  4. [JSP]erreur dans parcours d'une table
    Par lcoder dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/07/2006, 09h52
  5. D7/firebird 1.5 - parcours d'une table
    Par jer64 dans le forum Bases de données
    Réponses: 8
    Dernier message: 22/03/2006, 22h27

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