Autor Téma: FireDAC - Connection a Transaction  (Přečteno 1618 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
FireDAC - Connection a Transaction
« kdy: 28-05-2016, 12:17:30 »
Pri FireDAC nie je Transaction povinné. Prečítal som si nejaký materiál a mne z toho vychádza, že je lepšie urobiť používanie Transaction povinným.

V aplikácii používam dynamicky vytvárané komponenty* TFDTable, TFDQuery (jedine so SELECT) a TFDCommand (update, insert a delete).

Otázka znie:
  1) Mám si vytvoriť jediné Connection a stále mu podľa potreby prehadzavať Transaction, alebo
  2) Vytvoriť 3 x Connection s patričnými Transaction a potom iba Connection priradzovať k jednotlivým komponentom*
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2594
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:FireDAC - Connection a Transaction
« Odpověď #1 kdy: 28-05-2016, 16:18:22 »
Pri FireDAC nie je Transaction povinné.
Z pohledu RDBMS je transakce povinna, akorat nektere konektivity obsahuji implicitni transakci, kterou kdyz zadnou nepriradis, tak pouziji tu svoji.
Citace
Prečítal som si nejaký materiál a mne z toho vychádza, že je lepšie urobiť používanie Transaction povinným.
Pokud delas ACID aplikaci, tak kontrola nad transakcemi je nezbytnosti.

Citace
Otázka znie:
  1) Mám si vytvoriť jediné Connection a stále mu podľa potreby prehadzavať Transaction, alebo
  2) Vytvoriť 3 x Connection s patričnými Transaction a potom iba Connection priradzovať k jednotlivým komponentom*
Na to se neda odpovedet, kdyz clovek nevi, o co se snazis, ale uz to, jak se ptas mi prijde podezrele ;-)

Pokud jedes pod jednim threadem, vetsinou by ti mely stacit dve transakce
- jedna trvale zahajena Read/Only pro cteni z DB, kterou zavres az pri exitu aplikace (v podstate to, co ti nabizi FireDac implicitne, akort s tim, ze si u te transakce muzes nastavit vlastnosti, ktere potrebujes)
- jedna Read/Write pro zapis/cteni, nastartovana a commitnuta na dobu nezbytne nutnou k provedeni dane operace.

Pokud pracujes ve vice threadech, je pouziti samostatneho connection nutnosti, takze pak taky operujes v transakcich, ktere patri k danemu pripojeni.
« Poslední změna: 28-05-2016, 16:20:41 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:FireDAC - Connection a Transaction
« Odpověď #2 kdy: 28-05-2016, 16:35:36 »
Odpoveď som už dostal v sekcii FireBird :)  Ale vysvetlenie si cením a pomôže mi.
Na vlákna si netrúfam. Ak budem predpokladať dlhé spojenie s DB, tak radšej zamknem tabuľky. Ale podľa doterajších vedomostí si radšej natiahnem údaje do aplikácie (napr. do memory table, čo FireDAC má priamo v sebe), čo nebude trvať dlho a spracujem si ich už bez aktívnej transakcie.
Citace
Na to se neda odpovedet, kdyz clovek nevi, o co se snazis, ale uz to, jak se ptas mi prijde podezrele
Chcem v tom mať jasno, aby som neplodil nezmysly. Tak sa pýtam na všetky možnosti čo ma napadnú.
Citace
Pokud jedes pod jednim threadem, vetsinou by ti mely stacit dve transakce
Ešte potrebujem AutoCommit := False. Takže tri.
Opäť vďaka.
« Poslední změna: 28-05-2016, 16:39:10 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:FireDAC - Connection a Transaction
« Odpověď #3 kdy: 02-06-2016, 16:07:11 »
možno aj toto pomôže http://delphi.cz/post/Connection-Pool.aspx, len neviem či sa dá aplikovať aj na FD

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4438
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:FireDAC - Connection a Transaction
« Odpověď #4 kdy: 02-06-2016, 21:03:26 »
Je to riešené pomocou batch dávok - Array DML. Viď príspevokhttp://forum.delphi.cz/index.php/topic,15263.0.html
Ale ďakujem za snahu.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.