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 :

Effacement de données


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    838
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 838
    Points : 262
    Points
    262
    Par défaut Effacement de données
    bonsoir,

    je voudrais effacer toute les enregistrements d'une table sous condition comme indiqué dans l'exemple ci dessous:

    tous les enregistrements dont le champ "numfac" egale la variable "numedit" doivent etre effacés

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    table1.First;
    while not table1.EOF do
    begin
     
    if table1numfac.Value=numedit then table1.delete;
    table1.Next;
    end;
    le problème c'est que ce code ne fonctionne pas : il faut que je l'active plusieurs fois pour que tous les enregistrements concernés soit effacés


    merci
    a+

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    bizarre, cela devrait fonctionner. Comment peut-tu affirmer que non ? quel test fait la verification ?

    serait-t'il pas plus simple de passer par un un SQL ? +Simple et +Rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DELETE FROM TABLE1 WHERE NUMFAC=:NUMEDIT
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

    Je verrais plus ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      table1.First;
      while not table1.EOF do
      begin
      if table1numfac.Value=numedit then 
        table1.delete
      else
        table1.Next;
      end;
    Mais Sergio a raison, passer par une requête sera beaucoup plus efficace.

    @+ Claudius

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    838
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 838
    Points : 262
    Points
    262
    Par défaut réponse
    bonsoir,

    le dernier code fonctionne


    merci

  5. #5
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    Bonjour tout le monde,

    Looping, je t'explique pourquoi tu active le code plusieurs fois (tu sais pour combien de fois : c'est une suite arithmétique à base 2).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    table1.First;
    while not table1.EOF do
    begin
    if table1numfac.Value=numedit then table1.delete;
    table1.Next;
    end;
    Il faut juste éliminer l'instruction table1.Next; car aprés la suppression table1.delete le pointeur d'enregistrement pointe sur le suivant automatiquement et si tu fais table1.Next tu va looper un enregistrement donc sur 10 ca sera 5 qui seront supprimés et il faut activer une seconde fois et sur 5 il y aura 3 supprimés etc... (suite arithmétique d'activation).

    Voici ton code qui fonctionne en une seule fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    table1.First;
    while not table1.EOF do
    begin
    if table1numfac.Value=numedit then table1.delete;
    end;
    Sergio a dit :
    bizarre, cela devrait fonctionner...

    Mon intervention était pour donner une explication c'est le pourkoi de la chose.

    Mais l'idéal comme a dit Sergio :

    serait-t'il pas plus simple de passer par un un SQL ? +Simple et +Rapide
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM TABLE1 WHERE NUMFAC=:NUMEDIT
    Réussir c'est faire le bon choix.

    Voici ma supper fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fonction ChercherSolution(User_id:login in www.developper.com):Vrai;

  6. #6
    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 abdelghani_k Voir le message
    Voici ton code qui fonctionne en une seule fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    table1.First;
    while not table1.EOF do
    begin
    if table1numfac.Value=numedit then table1.delete;
    end;
    Et si ton 1° enregistrement (ou un autre) ne correspond pas au critère, comment tu sort de la boucle ?

    Citation Envoyé par abdelghani_k Voir le message
    Mais l'idéal comme a dit Sergio :

    serait-t'il pas plus simple de passer par un un SQL ? +Simple et +Rapide
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DELETE FROM TABLE1 WHERE NUMFAC=:NUMEDIT
    Là nous sommes tous d'accord.

    @+ Claudius

  7. #7
    Membre habitué Avatar de abdelghani_k
    Inscrit en
    Octobre 2002
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Octobre 2002
    Messages : 184
    Points : 150
    Points
    150
    Par défaut
    Je resterai dans la boucle.

    Tu as raison Cl@udius.
    Réussir c'est faire le bon choix.

    Voici ma supper fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Fonction ChercherSolution(User_id:login in www.developper.com):Vrai;

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    838
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 838
    Points : 262
    Points
    262
    Par défaut solution adoptée
    bonsoir,

    j'ai adoptée cete solution qui semble fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    table1.First;
    while not table1.EOF do
    begin
    if table1numfac.Value=numedit then table1.delete else table1.next;
    end;
    A+

Discussions similaires

  1. changer le type d'un champs d'une table = effacement des données ?
    Par pierre2410 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 14/05/2007, 11h22
  2. base de donnée sous excel: effacer les données
    Par eseb777 dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 03/05/2007, 09h32
  3. Effacement de donnée
    Par PsykotropyK dans le forum Access
    Réponses: 4
    Dernier message: 07/09/2006, 15h30
  4. effacer les données d'un fichier texte
    Par Shyboy dans le forum Langage
    Réponses: 7
    Dernier message: 28/06/2006, 13h23
  5. (VB-E] Effacement de données
    Par lolo_bob2 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/06/2006, 19h49

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