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 :

Suppression multiple dans DBGrid en Interbase


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Par défaut Suppression multiple dans DBGrid en Interbase
    Salut à tous, mon problème est que j'arrive à supprimer une ligne d'un dbgrid mais pas plusieurs.
    Alors je suis sur INTERBASE
    Delphi 2010 FR
    Voici ma procédure de suppression

    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
    29
    30
    31
    32
     
    procedure TForm1.btn1Click(Sender: TObject);
      Var
        i,K : Integer;
        N_Fact, Num_Bord, S  : string;
    begin
      if Dialogs.MessageDlg('Confirmer la suppréssion des factures séléctioners ?',
        mtConfirmation, [mbAbort, mbYes], 0, mbYes) = mrYes then
      begin
        with dbgrd1 do
        begin
          I:= 1;
          while i<= SelectedRows.Count -1 do
            begin
              N_Fact := '';
              DataSource.DataSet.GotoBookmark(pointer(SelectedRows.Items[i])); // à cette ligne après de deuxième passage de la boucle erreur violation d'accès.
              N_Fact := DataSource.DataSet.FieldByName('N_Facture').Value;
              Try
                IBQuery1.SQL.Clear;
                IBQuery1.SQL.Add('Delete From ENTETEFACT where N_Facture = :N1');
                IBQuery1.Params.ParamByName('N1').Value := N_Fact;
                if not IbTransaction1.InTransaction
                  then IbTransaction1.StartTransaction;
                IBQuery1.ExecSql;
                IbTransaction1.Commit;
                IBTransaction1.Active := True;
              except
              end;
              I := I + 1;
            end;
        end;
      end;
    Merci

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Par défaut
    Voici une solution :

    Je récupère d'abord les n° de facture à supprimer dans un tableau dynamique et ensuite je le parcours et supprime les factures grâce aux n° qu'il contient. A la fin en exécute un refresh pour actualiser la table.

    Pour les transactions, je ne travaille pas avec IB donc j'ignore comment il faut les appliquer.


    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
    29
    30
     
    procedure TForm1.btn1Click(Sender: TObject);
    Var
      i,K : Integer;
      N_Fact, Num_Bord, S : string;
      aNoFact : Array of string;
    begin
      if Dialogs.MessageDlg('Confirmer la suppression des factures sélectionnées ?',
                  mtConfirmation, [mbAbort, mbYes], 0, mbYes) = mrYes then begin
        with DbGrid1.DataSource.DataSet do begin
          I := 0;
          while i <= SelectedRows.Count -1 do begin
            GotoBookmark(pointer(SelectedRows.Items[i]));
            SetLength(aNoFact, (i + 1) );
            aNoFact[i] := FieldByName('N_Facture').AsString;
            I := I + 1;
          end;
        end;
     
        if not IbTransaction1.InTransaction  then IbTransaction1.StartTransaction;
        IBQuery1.SQL.Text := 'DELETE FROM ENTETEFACT WHERE N_FACTURE=:N_FACTURE');
        for i := low(aNoFact] to High(aNoFact] do begin
          IBQuery1.Params.ParamByName('N_FACTURE').Value := aNoFact[i];
          IBQuery1.ExecSql;
        end;
        IbTransaction1.Commit;
        IBTransaction1.Active := True;
        DbGrid1.DataSource.DataSet.Refresh;
      end;
    end;

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Par défaut Suppression multiple dans DBGrid en Interbase
    Salut et merci à akli agha pour sa réponse et son aide précieuse

    le code que vous m'avais envoyer ne marche pas parfaitement, mais portait quelque modification et après test ça marche à merveille.
    S'il y'a quelqu'un d'autre qui peut apporté des améliorations et plus de pour rendre le code plus simple et pratique sa sera bien
    alors voici le code
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    procedure TForm1.btn1Click(Sender: TObject);
    Var
      i : Integer;
      N_Fact,Num_Bord,S : string;
      aNoFact : Array of string;
    begin
      if Dialogs.MessageDlg('Confirmer la suppression des factures sélectionnées ?',
                  mtConfirmation, [mbAbort, mbYes], 0, mbYes) = mrYes then begin
        with DbGrd1 do begin
          I := 0;
          while i <= SelectedRows.Count -1 do begin
            DataSource.DataSet.GotoBookmark(pointer(SelectedRows.Items[i]));
            SetLength(aNoFact, (i + 1) );
            aNoFact[i] := DataSource.DataSet.FieldByName('N_Facture').AsString;
            I := I + 1;
          end;
        end;
     
        if not IbTransaction1.InTransaction  then IbTransaction1.StartTransaction;
        IBQuery1.SQL.Text := 'DELETE FROM ENTETEFACT WHERE N_FACTURE=:N_FACT';
        for i := low(aNoFact) to High(aNoFact) do begin
          IBQuery1.Params.ParamByName('N_FACT').Value := aNoFact[i];
          IBQuery1.ExecSql;
        end;
        IbTransaction1.Commit;
        IBTransaction1.Active := True;
      end;
      IBQuery1.Close;
      IBQuery1.SQL.Clear;
      Mmo1.Clear;
      Num_Bord := ComboBox1.Text;
      Try
        S:='Select N_Facture,Date_Facture,Mont_OFF,Mont_Ass,Mont_Fact,N_Assure,Centre,(Mont_OFF+Mont_Ass+Mont_Fact) AS Total From ENTETEFACT where N_Bourdereau= :Num_Bord order By N_Facture';
        IBQuery1.SQL.Add(S);
        IBQuery1.Params.ParamByName('Num_bord').Value := ComboBox1.Text;
        IBQuery1.Open;
      Except;
      End;
    end;

  4. #4
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid2.SelectedRows.Delete;

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2010
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2010
    Messages : 192
    Par défaut Suppression multiple dans DBGrid en Interbase
    Salut et merci pour votre participation, Es que sa supprime de la base ou du dbgrid uniquement, plus de précision S.V.P.

  6. #6
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut

    laide en ligne:
    Supprime tous les enregistrements spécifiés par les signets de la liste de l'ensemble de données du DBGrid associé.

    procedure Delete;

    Description

    Appelez Delete pour supprimer l'ensemble d'enregistrements représenté par la liste de signets de l'ensemble de données du DBGrid associé. Pour supprimer tous les signets de la liste sans changer l'ensemble de données, utilisez plutôt la méthode Clear

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

Discussions similaires

  1. suppression multiple dans form
    Par evevev dans le forum Langage
    Réponses: 2
    Dernier message: 15/10/2011, 06h48
  2. suppression multiple dans un StringGrid
    Par ludojojo dans le forum C++Builder
    Réponses: 26
    Dernier message: 31/05/2008, 12h35
  3. Récupérer des valeurs multiples dans un DBGrid
    Par Antjac dans le forum Bases de données
    Réponses: 7
    Dernier message: 17/12/2007, 20h44
  4. suppression multiple dans un treeview
    Par tomkiki dans le forum Delphi
    Réponses: 6
    Dernier message: 09/05/2007, 15h30
  5. Réponses: 2
    Dernier message: 08/01/2007, 20h26

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