Hver af disse "set" kommandoer kan gå skidt, hvis objectet er låst, eks. objekt1.locked=true. Hvordan kan jeg sikre, at ingen af kaldene bliver udført, hvis bare én "set" kommando går skidt.
Jeg kunne selvølgelig skrive if object1.locked=false and object2.locked=false and ... then begin obejct1.set; object2.set; ... end; men kan det ikke gøres smartere?
AI kræver lokal regnekraft. For Robert Luciani giver HP Z6 G5 A, - drevet af NVIDIA AI – både ekstrem ydelse, kreativ frihed og stabil drift i en støjsvag pakke.
if not (object1.locked or object2.locked or ...) then
Du skal under alle omstændigheder teste inden du begynder på '...set' ellers skal du igang med noget roll-back som du selv skriver og rekursive procedurer som gør det langt sværere at læse når du engang kommer tilbage koden.
... så kan du lave den sædvanlige try-except tingest med en krølle:
begin try Object1.Set; Object2.Set; Object3.Set; except on e: exception do begin if Object1.Done then Object1.Rollback; if Object2.Done then Object2.Rollback; if Object3.Done then Object3.Rollback;
I dine ObjektX-objekter kan du spørge om der er transaktioner i gang eller om der skal laves nye
var LocalTransaction : boolean; begin LocalTransaction := not Database.InTransaction; if LocalTransaction then Database.StartTransaction; try // arbejde if LocalTransaction then Database.Commit; except if LocalTransaction then Database.Rollback; raise; end; end;
type Object1Exception = class(Exception); Object2Exception = class(Exception); Object3Exception = class(Exception);
...
try except on e: Object2Exception do Object1.Rollback; on e: Object1Exception do begin Object2.Rollback; Object1.Rollback; end; on e: Object3Exception do begin Object3.Rollback; Object2.Rollback; Object1.Rollback; end; end; end;
... men det er ikke meget kønnere end det første oplæg.
Jeg fik en automatisk mail om, at jeg skulle lukke spørgsmålet, da der ikke havde været aktivitet i lang tid. Der var ikke nogen, der havde lagt et svar, jeg kunne acceptere, og jeg ville ikke til at åbne sagen igen efter 3½ år. Derfor lukkede jeg den bare. Beklager hvis det er brud med god skik. Det var ikke min hensigt.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.