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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7183
  • Karma: 44
    • Verze Delphi: W10 + D11.1
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
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7183
  • Karma: 44
    • Verze Delphi: W10 + D11.1
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.
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3506
  • Karma: 139
    • 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ů: 7183
  • Karma: 44
    • Verze Delphi: W10 + D11.1
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?
Win11 64b, Delphi 11.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3506
  • Karma: 139
    • 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...