Autor Téma: Table.Delete OK, Table.Post NIE  (Přečteno 2526 krát)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Table.Delete OK, Table.Post NIE
« Odpověď #15 kdy: 21-10-2020, 09:56:49 »
Citace
Takže konkurenčný prístup nehrozí.
Nedávno si tady psal že pokud bude zájem o sitovou verzi tak si poridiš vyšší verzi Delphi pro C/S ..
To pak budeš přepisovat aplikaci ? 


Citace
To Jirka: ja som si myslel, že spojenie/transakciu s DB treba stále držať nažive. Že to má vysokú réžiu a podobné úvahy. Prerobím to podľa Tvojho príkladu.
Jen to proboha nepředělávej  žádným hurá systémem. To není záležitost změny jedné procedury, ale kompletní nastavení celé logiky prohlížení a editace dat 



Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3290
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Table.Delete OK, Table.Post NIE
« Odpověď #16 kdy: 21-10-2020, 10:00:19 »
Reagoval jsem na postup pf  aby se používala jedna RW  transakce  na prohlížení i editaci
Ne, to nebylo mineno, aby se pouzivala jedna RW, ale aby pri lokalizaci problemu pouzil jednu transakci, protoze jestli lze neco dovodit z popisu jeho problemu, tak tam micha autocommit a explicitne rizene transakce.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6019
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Table.Delete OK, Table.Post NIE
« Odpověď #17 kdy: 21-10-2020, 10:00:56 »
Citace
Nedávno si tady psal že pokud bude zájem o sitovou verzi tak si poridiš vyšší verzi Delphi pro C/S ..
To pak budeš přepisovat aplikaci ?
Osobne na to nevidím dôvod.
Citace
Jen to proboha nepředělávej  žádným hurá systémem. To není záležitost změny jedné procedury, ale kompletní nastavení celé logiky prohlížení a editace dat
S tým už mám skúsenosti ;D Ja som si tu ukážku vytlačil. Naštudujem si ju, aby som ju pochopil čo najviac do hĺbky = čo to bude znamenať pre moju logiku v aplikácii.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3290
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Table.Delete OK, Table.Post NIE
« Odpověď #18 kdy: 21-10-2020, 10:03:07 »
Jirka v príklade stále vytvára a ničí transakcie. To ma zaskočilo. Ale ako písal, je tu 100 % istota.
Hm, vzdyt jsi psal, ze mas buhvi na kolika mistech neukoncene transakce, protoze sis myslel, ze je FreeAndNil ukonci. Tak na co pouzivas FreeAndNil, kdyz ty transakce taky stale nevytvaris  :o

Jsem z tebe Gogo...

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Table.Delete OK, Table.Post NIE
« Odpověď #19 kdy: 21-10-2020, 10:10:33 »
Ne, to nebylo mineno, aby se pouzivala jedna RW, ale aby pri lokalizaci problemu pouzil jednu transakci, protoze jestli lze neco dovodit z popisu jeho problemu, tak tam micha autocommit a explicitne rizene transakce.
I já to tak pochopil , proto jsem psal, že v testu ano ale v produkční nasazení radši ne .

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Table.Delete OK, Table.Post NIE
« Odpověď #20 kdy: 21-10-2020, 10:13:37 »
Naštudujem si ju, aby som ju pochopil čo najviac do hĺbky = čo to bude znamenať pre moju logiku v aplikácii.

Tam žádnou "hloubku" nehledej , je to jen princip
-Vytvořím
-Použiji
-Uvolním


« Poslední změna: 21-10-2020, 10:15:47 od Jirka »

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3290
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Table.Delete OK, Table.Post NIE
« Odpověď #21 kdy: 21-10-2020, 10:35:32 »
Tam žádnou "hloubku" nehledej , je to jen princip
-Vytvořím
-Použiji
-Uvolním
Ja bych jeste zduraznil Ukoncim tj. standardni pattern:
Kód: Delphi [Vybrat]
  1. ...
  2. txn.StartTransaction;
  3. try
  4.   ...
  5.   txn.Commit;
  6. except
  7.   txn.Rollback;
  8.   raise;
  9. end;
  10. ...
  11. end;
  12.  
« Poslední změna: 21-10-2020, 10:37:07 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6019
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Table.Delete OK, Table.Post NIE
« Odpověď #22 kdy: 21-10-2020, 11:32:08 »
Jirka v príklade stále vytvára a ničí transakcie. To ma zaskočilo. Ale ako písal, je tu 100 % istota.
Hm, vzdyt jsi psal, ze mas buhvi na kolika mistech neukoncene transakce, protoze sis myslel, ze je FreeAndNil ukonci. Tak na co pouzivas FreeAndNil, kdyz ty transakce taky stale nevytvaris  :o

Jsem z tebe Gogo...
FreeAndNil(MyQuery)
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6019
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Table.Delete OK, Table.Post NIE
« Odpověď #23 kdy: 21-10-2020, 11:38:49 »

Mám niečo podobné
Kód: [Vybrat]
class procedure TFDFunction.QryOpen(const AQuery: TFDQuery; var AFieldList: TList<TField>);
var
  Field: TField;
begin
  Assert(Assigned(AQuery), '  AQuery is nil  ');
  Assert(AQuery.SQL.Text <> '', '  AQuery.SQL.Text is empty  ');
  Assert(Assigned(AFieldList), '  AFieldList is nil  ');
.
  if not AQuery.Transaction.Active then
    AQuery.Transaction.StartTransaction;
.
  try
    if AQuery.Active then
      AQuery.Refresh
    else
      AQuery.Open;
.
    AQuery.First;
.
    if AFieldList.Count > 0 then
      AFieldList.Clear;
.
    for Field in AQuery.Fields do
      AFieldList.Add(Field);
  except
    on E: Exception do
    begin
      E.RaiseOuterException(EAbstractException.Create(EDB_Query_Open, E.Message));
      raise;
    end;
  end;
end;
a k tomu
Kód: [Vybrat]
class function TFDFunction.NewQryRead(const AOwner: TComponent): TFDQuery;
begin
  Result := TFDQuery.Create(AOwner);
  Result.Connection := dtmdBasic.conFOC;
  Result.Transaction := dtmdBasic.fdtrManual;
  Result.FetchOptions.Mode := fmAll;
end;
.
class procedure TFDFunction.FreeAndNilQry(AQuery: TFDQuery; AFieldList: TList<TField>);
begin
  if AQuery.Transaction.Active then
    AQuery.Transaction.Rollback;
.
  FreeAndNil(AQuery);
  FreeAndNil(AFieldList);
end;
Takže by to nemalo byť tak zložité. Do NewQryRead pridám parameter Auto. A bude len jedna NewQuery.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6019
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Table.Delete OK, Table.Post NIE
« Odpověď #24 kdy: 21-10-2020, 11:56:17 »
Len dodatok, že moja obchodná logika nie je komplikovaná. Je pomerne priamočiara.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Table.Delete OK, Table.Post NIE
« Odpověď #25 kdy: 21-10-2020, 12:06:49 »
Len dodatok, že moja obchodná logika nie je komplikovaná. Je pomerne priamočiara.
;D

Citace
Result := TFDQuery.Create(AOwner);
Proč používáš AOwner když si Query vracíš jako Výsledek funkce ? Není to zbytečné ?

Citace
class procedure TFDFunction.FreeAndNilQry(AQuery: TFDQuery; AFieldList: TList<TField>);
Neměly by být AQuery a AFieldList  předávany odkazem přes var ?
« Poslední změna: 21-10-2020, 12:12:16 od Jirka »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6019
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Table.Delete OK, Table.Post NIE
« Odpověď #26 kdy: 21-10-2020, 12:14:03 »
Citace
Proč používáš AQwner když si Query vracíš jako Výsledek funkce ? Není to zbytečné ?
Lebo som nerozmýšľal pri definícii ani pri písaní kódu.
Citace
Neměly by být AQuery a AFieldList  předávany odkazem přes var ?
V princípe áno.
Ďakujem.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Table.Delete OK, Table.Post NIE
« Odpověď #27 kdy: 21-10-2020, 12:26:31 »
Kód: [Vybrat]
if AFieldList.Count > 0 then
      AFieldList.Clear;
.
    for Field in AQuery.Fields do
      AFieldList.Add(Field);

Jen taková drobná přípomínka 
Proč si vytváříš další seznam polí  když se k němu dostaneš kdekoliv přes AQuery.Fields ?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6019
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Table.Delete OK, Table.Post NIE
« Odpověď #28 kdy: 21-10-2020, 12:53:35 »
Lebo pri opakovanom prístupe, v cykle, to je rýchlejšie. Aj keď v mojom prípade je tento argument skôr úsmevný.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 436
  • Karma: 9
    • Verze Delphi: XE2
Re:Table.Delete OK, Table.Post NIE
« Odpověď #29 kdy: 21-10-2020, 13:15:58 »
Lebo pri opakovanom prístupe, v cykle, to je rýchlejšie. Aj keď v mojom prípade je tento argument skôr úsmevný.
Ty to máš změřené ?

A i kdyby to mělo mít nějaké vyznačné zrychlení  tak se to IMHO nevyplatí minimálně oproti
- režii vytváření seznamu
- hlídaní zda tento seznam patří k požadovanému Query
- režii  a hlídaní uvolnování seznamu