J'ai 2 questions à ce sujet :
Quest 1 :
J'ai un p'tit souci de rafraichissement sur un DBGrid suite à une suppression.
- Avec le code si dessous, si la suppression est validée par un commit tout fonctionne.
- Par contre en cas d'accès concurrent le code va exécuter le rollback et dans ce cas
"DM.adoQueryOrder.Refresh" plante lamentablement avec un message du genre : "modification ou
suppression de la valeur clé de cette ligne au niveau du magasin de données. Suppression de la ligne locale."
Quest 2 :
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 // options DM.adoQueryOrder.CursorLocation := clUseClient; DM.adoQueryOrder.CursorType := ctKeyset; DM.adoQueryOrder.LockType := ltOptimistic; ... // données du grid DM.adoQueryOrder.SQL.Add(select ... from ... where id=xxx) ... DM.DsOrder.DataSet := DM.adoQueryOrder; dbgridOrder.DataSource := DM.DsOrder; ... // suppression DM.ADOConnectRead.BeginTrans; try DM.adoQueryOrder.Delete; DM.ADOConnectRead.CommitTrans; except on E:Exception do begin DM.ADOConnectRead.RollbackTrans; // plantage en cas d'accés concurrents DM.adoQueryOrder.Refresh; end; end;
Un autre problème concernant un blocage IHM. Si j'exécute le code suivant à partir d'une instance 1
de mon programme, l'instance 2 qui souhaite supprimer la même donnée est bloqué (ihm freeze) jusqu'à
ce que l'utilisateur réponde au message de confirmation de suppression. Comment coder de facon à ne
pas bloquer instance 2 ?
Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // suppression DM.ADOConnectRead.BeginTrans; try DM.adoQueryOrder.Delete; // ici instance 2 reste bloqué jusqu'a ce que l'utilisateur réponde if MessageDlg('Veuillez confirmer la suppresion',mtConfirmation,[mbYes,mbNo],0)=mrYes then DM.ADOConnectRead.CommitTrans; ...
Partager