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 :

comment supprimer plusieurs enregistrements


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut comment supprimer plusieurs enregistrements
    voilà,j'ai une table détail et je veux supprimer tous les enregistrements de cette table d'un seul coup.Comment faire svp?

  2. #2
    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
    Salut.
    N'ayant pas connaissance du techno utilisé; je dirais que tu devrais execute cette requête sur cette table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM TATABLE
    Sinon, tu devrais parcourir ta table et exécuter la méthode Delete sur chaque enregistrement.

    A+
    On progresse .....

  3. #3
    Membre confirmé
    Avatar de didier.cabale
    Homme Profil pro
    Conseil - Consultant en systèmes d’information
    Inscrit en
    Août 2004
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d’information
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2004
    Messages : 130
    Points : 522
    Points
    522
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    j'ai une table détail et je veux supprimer tous les enregistrements de cette table d'un seul coup.
    S'il s'agit d'une TTable, je crains que çà ne soit pas possible.
    En revanche s'il s'agit d'un TQuery, vous pouvez utiliser une instruction SQL du type 'delete from matable where condition'
    Cordialement

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    voici le code que j'ai écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DM.TNotes.Edit;
    DM.TNotes.First;
    DM.TNotes.Delete;
    DM.TNotes.Next;
    mais il ne supprime qu'un seul enregistrement c'est tout.

  5. #5
    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
    Essaie un peu ceci. Il fut quand même parcourir les enregistrements et les supprimer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    With DM.TNotes do
    begin
        First;
        While Not eof do
        begin
            Delete;
            Next;
        end;
    end;
    On progresse .....

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    voila tout mon code:
    je fais d'abord un filtre sur la table "notes" et puis je supprime les enregistrements trouvés en suivant le filtre effectué:
    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
    DM.TNotes.Filtered:=false;
    DM.TNotes.Filter:='Num_classe = '''+(DBEdit1.Text)+'''';
    DM.TNotes.Filtered:=true;
     
    if messageDlg('Etes-vous sûr de vouloir supprimer cette classe?',mtinformation,
    [mbOK,mbCancel],0)=mrOK then begin
     
    With DM.TNotes do
    begin
    First;
    While Not eof do
    begin
    Delete;
    Next;
    end;
    end;
    end;
    end;
    mais il efface 2 enregistrements seulement!???

  7. #7
    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
    Je vais te donner ma methode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    With TQuery.Create(Nil) do
    try
      //Ici paramétrage des connextion ou Alias
     //generation de la requête. Supposons que ta table s'appelle TNOTES
     SQL.Add('DELETE FROM TNOTES');
     SQL.Add('Where Num_classe = :PNUM_CLASSE');
     //Affectation du paramètre
     ParamByName('PNUM_CLASSE').AsString := DBEdit1.Text;
     //Execution de la requête
     ExecSQL;
    finally
       Free;
    End;
    PS : Il faut ptet changer un ou deux trucs en fonction du composant Query utilisé vu que je n'ia pas Delphi sous la main .

    A+
    On progresse .....

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par NABIL74 Voir le message
    mais il efface 2 enregistrements seulement!???
    Simplement parce que le Next est en trop dans la boucle.

    Mais la méthode la plus simple et surtout plus efficace est celle présentée par Andry via SQL.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM TA_TABLE WHERE Condition;

    @+ Claudius

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut problème résolu!
    :yaisse2:
    ça marche à merveille!

    Merci beaucoup à vous tous surtout à toi Andy et à toi aussi Cl@udius.
    bon courage mes amis!
    a+

  10. #10
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    szalut .
    malgrés cette discussion et marqué comme résolus,mais un petit ceci qui me casse la tete.j'ai tombé dans le meme probléme ,je veut vider la table entiere
    mon code et le suivant:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    begin
        t1.First;
        While Not (t1. eof )do
        begin
          t1. Delete;
          t1. Next;
        end;
    end;
    mais le message suivant s'affiche ,pourquoi ??je ne sais pas!! :
    ""trop de ligne sont affecté par la modification"
    sachant que je veut vider ma table sans passé par le SQL comme au dessus,je veut le vider par code comme dans mon code.
    merci beacoup pour vous aides.
    cordialement rec82.

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Salut;

    afin de supprimer les enregistrements d'une table et si tu fais ça dans une boucle tu n'as pas besoin du Next le Delete se positionne automatiquement sur l'enregistrement suivant sinon tu aura toujours "n/2" enregistrements supprimés en considérant que "n"est le nombre d'enregisrements de ta table.

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  12. #12
    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
    Citation Envoyé par Just-Soft Voir le message
    Salut;

    afin de supprimer les enregistrements d'une table et si tu fais ça dans une boucle tu n'as pas besoin du Next le Delete se positionne automatiquement sur l'enregistrement suivant sinon tu aura toujours "n/2" enregistrements supprimés en considérant que "n"est le nombre d'enregisrements de ta table.

    Bonne chance.
    Je l'ai remarqué aussi. D'ailleurs, je me demande pourquoi ils utilisent pas SQL au lieu de boucler.
    On progresse .....

  13. #13
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut.
    salut .
    j'ai essayé avec adoquery mais pas de resultat un message s'affiche:
    "command text does not return a result set".
    malgrés ma table n'est pas vide.
    mon code est :
    sachant que j'utilise delphi 6 et access 2003.
    merccccccccccccccccccccccccccccci beacoup.
    rec82 cordialement.

  14. #14
    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
    Dans le cas ou tu utilise un AdoQuery,
    - utilise la methode ExecSQL dans le cas d'un Insert/Update/Delete.
    - utilise Open pour ramener les records.
    Mais dans ton cas, un ADoCommand suffit amplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      with TADOCommand.Create(Nil) do
      try
        Connection := TonADOConnection;
        CommandText := 'Delete from recap';// pas Delete * from recap
        try
          Execute;
        except
          //Ici la gestion en cas d'erreur.
        end;
      finally
        Free;
      end;
    Courage
    On progresse .....

  15. #15
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Je crois que Andry a bien fait preuve de puissance SQL et protection du code.

    sauf si ta question est autre le code de Andry et plus que satisfaisant, tien nous au courant.

    Bonne chance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  16. #16
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut .

    merciiiiiiiiiiiiiiiii beacoup andry,just-soft ça marche trés bien.

    merci autre fois,a toute l'équipe developpez.com.
    cordialement.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 119
    Points : 115
    Points
    115
    Par défaut
    Et pourquoi ne pas avoir fait tout simplement un EmptyTable sur la table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    taTable.EmptyTable;
    Jeankiki

  18. #18
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    salut.
    ma table est une adotable,je pense que emptytable n'existe pas avc adotable.
    cordialement.

  19. #19
    Membre à l'essai
    Inscrit en
    Janvier 2009
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 42
    Points : 22
    Points
    22
    Par défaut
    ça ce qu'on appel un forum d'entre-aide ...vraiment je suis très ému..bravo tout le monde.

  20. #20
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Pour rec82 en complément à la réponse de Claudius , la boucle s'écrit simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
        t1.First;
        While not t1.IsEmpty do
          t1.Delete; ///Passe au suivant et si c'est le dernier qui est supprimé cela mets BOF et EOF à True
    end;
    Mais le plus important, il faut mettre une clé primaire qui identifie de manière unique un enregistrement, indispensable pour un Delete via ADO ... sinon on a le message "trop d'enreg ..."

    A part ça, le SQL c'est toujours mieux, et plus facile à tracer ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/04/2011, 11h40
  2. comment supprimer plusieur enregistrements a la fois
    Par medreg dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/03/2011, 08h44
  3. [C#] Comment supprimer un enregistrement de la table ?
    Par paradeofphp dans le forum Accès aux données
    Réponses: 12
    Dernier message: 03/08/2006, 09h59
  4. Réponses: 1
    Dernier message: 28/01/2006, 12h36
  5. HELP!Comment supprimer des enregistrements de tables jointes
    Par ROOTPARIS dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/06/2004, 16h41

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