Autor Téma: FireDAC.Comp.Client.TFDTransaction.Options  (Přečteno 368 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5584
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
FireDAC.Comp.Client.TFDTransaction.Options
« kdy: 30-11-2020, 13:49:42 »
Konkrétne:

  • AutoStart
  • AutoStop
Nenašiel som k tomu nikde žiadnu zmienku. Napíšete mi, že vysvetlenie je logické. Ibaže každá moja realizácia/vysvetlenie logického končí katastrofou :'(
  • AutoStart  - to by malo zakaždým spustiť StartTransaction, ak  nie je spustená pri metódach ako Open, Exec...
  • AutoStop  - tu vôbec netuším kedy sa to spustí a čo to urobí. Ktorú metódu to vlastne zavolá. Podľa všetkého to je naviazané na AutoCommit
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 3101
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5584
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:FireDAC.Comp.Client.TFDTransaction.Options
« Odpověď #2 kdy: 01-12-2020, 09:45:16 »
Dobrý odkaz! A v ňom informácia:
Citace
Ak aplikácia volala metódu StartTransaction , potom bude automatická správa transakcií deaktivovaná, kým nezavolá zodpovedajúca metóda Commit alebo Rollback . Spravidla nie je potrebné nastavovať hodnotu vlastnosti AutoCommit na hodnotu False , jednoducho použite explicitný ovládací prvok transakcie ( StartTransaction , Commit alebo Rollback ), keď to potrebujete.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 3101
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC.Comp.Client.TFDTransaction.Options
« Odpověď #3 kdy: 01-12-2020, 16:34:05 »
A v ňom informácia:
Citace
Ak aplikácia volala metódu StartTransaction , potom bude automatická správa transakcií deaktivovaná, kým nezavolá zodpovedajúca metóda Commit alebo Rollback . Spravidla nie je potrebné nastavovať hodnotu vlastnosti AutoCommit na hodnotu False , jednoducho použite explicitný ovládací prvok transakcie ( StartTransaction , Commit alebo Rollback ), keď to potrebujete.
To je znama vlastnost, ale pomerne nebezpecna, protoze se muze lehce nejakemu "kutilovi" stat, ze necha vykonat sekvenci SQL prikazu, aniz by tu transakci nastartoval. A pak mu vsechno bude zdanlive fungovat, ovsem jen do doby, nez mu nejaka race condition rozm*da konzistenci DB resp. az se mu ta nekonzistence DB projevi... A pak je docela zabava hledat, co a kolik se toho nepovedlo a poskozenou DB opravovat...

Proto se v kodu ty transakce vytvareji/zahajuji/ukoncuji/rusi na jednom miste a ve factory na transakce se to zahajeni transakce nastavenim na false vynucuje.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5584
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:FireDAC.Comp.Client.TFDTransaction.Options
« Odpověď #4 kdy: 01-12-2020, 19:48:16 »
Hm, práve som ukončil opravu projektu. Ja som v tomto prípade jediný kutil :)
Od továrne som upustil. Lebo by som do nej nedostal správne StartTransaction - Commit - Rollback + ostatné príslušenstvo v jednotlivých objektoch. Niečo si mi nadhodil, ale...
Môžem urobiť jednu vec. V prípade potreby môžem:
  • nahradiť Table.UpdateTransaction dočasnou transakciou
  • urobiť čo treba
  • vrátiť Table pôvodnú transakciu
  • dočasnú transakciu zničiť
To by malo byť podľa mňa technicky čisté a bezpečné riešenie riešenie. Počítam s tým, že sa stane zázrak a niekto v tom projekte bude pokračovať. Tak nech má čo najmenej problémov.
.
Alebo to mám už ponechať tak ako to je?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online pf1957

  • Padawan
  • ******
  • Příspěvků: 3101
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC.Comp.Client.TFDTransaction.Options
« Odpověď #5 kdy: 02-12-2020, 07:12:02 »
Hm, práve som ukončil opravu projektu. Ja som v tomto prípade jediný kutil :)
Od továrne som upustil. Lebo by som do nej nedostal správne StartTransaction - Commit - Rollback + ostatné príslušenstvo
Factory je jen "vyspelejsi" alternativa k volani konstruktoru objektu. Ja uz bych to uzavrel, protoze to je porad dokola...