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:
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
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:
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; |
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.
Suppression multiple dans DBGrid en Interbase
Salut, je suis d’accord avec sergiomaster tous dépends du composant que vous utilisé, avec UIBQuery rien ne se passe, avec TTable c'est OK, avec TQuery il faut une manipulation précises alors voila.
le code que j'ai écrit dans le poste #3 après quelque modification d’après la solution donner par Akli agha et après test sa marche très bien.
vous pouvez l'utilisé et le changé a vos fins.
je suis toujours d'accord pour plus d'amélioration sur le code afin de le rendre plus rerformant
Suppression multiple dans DBGrid en Interbase
Salut tous le monde, je pense que c'est la méthode la juste à utiliser puisque aucune autre solution n'a était proposer.