FireBird, Delete et BeforeDelete
Salut
Delphi 2009 + BD FireBird 2.5
J'ai une relation maitre / détail, définie au niveau de la BD avec mise à jour des règles "CASCADE". j'utilise un IBQ (sans prise de tête :D) dans un bouton Supprimer j'ai le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| procedure TfmMain.tb_Supprimer_CourrierClick(Sender: TObject);
var
c_c : integer;
begin
Ajout_Mod := True;
c_c := dmData.IBQ_Courrier.FieldByName('CODE_COURRIER').AsInteger;
if MessageDlg('Etes vous sûr de vouloir supprimer l''enregistrement en cours ... ?',
mtConfirmation, [mbYes, mbNo], 0, mbNo) = mrYes then
begin
try
dmData.IBQ_Courrier.SQL.Clear;
dmData.IBQ_Courrier.SQL.Add('Delete from tb_courrier where code_courrier =:c_courrier');
dmData.IBQ_Courrier.ParamByName('c_courrier').Value := c_c;
dmData.IBQ_Courrier.ExecSQL;
dmData.IBTrans_Courrier.CommitRetaining;
finally
Dialogs.MessageDlg('Enregistrement supprimé avec succès.', mtInformation, [mbOk], 0, mbOk);
end;
Affiche_Data(dmData.IBQ_Courrier, 'tb_courrier', 'code_courrier');
end;
end; |
mais avant de supprimer l'enregistrement voulu je veux supprimer son détail donc je fais un appel au BeforDelete comme suit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| procedure TdmData.IBQ_CourrierBeforeDelete(DataSet: TDataSet);
var
c_c : integer;
begin
c_c := IBQ_Courrier.FieldByName('code_courrier').AsInteger;
if IBQ_Courrier.FieldByName('Type_courrier').AsString = 'DEPART' then
begin
IBQ_Dest.SQL.Clear;
IBQ_Dest.SQL.Add('Delete * from tb_destinataire where code_courrier =:code_courrier');
IBQ_Dest.ParamByName('c_courrier').Value := c_c;
IBQ_Dest.ExecSQL
end
else
begin
if IBQ_Courrier.FieldByName('Type_courrier').AsString = 'ARRIVE' then
begin
IBQ_Exp.SQL.Clear;
IBQ_Exp.SQL.Add('Delete * from tb_expediteur where code_courrier =:code_courrier');
IBQ_Dest.ParamByName('c_courrier').Value := c_c;
IBQ_Exp.ExecSQL;
end;
end;
end; |
Mais à ma surprise l'exécution de l'instruction Delete du code SQL ne fait pas appel au BeforeDelete !! est-ce un bug ? dois-je ajouter quelque chose ?
NB : en définissant les règles de MAJ à CASCADE j'ai cru comprendre que la suppression des fils (détails) serait à la charge du SGBD, vrai ou faux ?