Autor Téma: Locate() - nenájde nové záznamy v rámci životnosti formulára  (Přečteno 394 krát)

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3004
  • Karma: 135
    • Verze Delphi: D2007, XE3, DX10
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #15 kdy: 17-10-2020, 18:53:13 »
AutoStop - pôvodná hodnota True.
Chtel jsem se zeptat na StopOptions a napsal jsem to blbe :-(

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #16 kdy: 17-10-2020, 19:35:45 »
Až teraz mi došlo čo spôsobuje, že pre Table.Transaction a Query.Transaction používam tú istú transakciu.
Podľa momentálnej úvahy by som mal použivať dve samostatné transakcie, aby mi nedochádzalo ku kolízii.
StopOptions - s tým nič nerobil
  • xolfCmdsInactie - True
  • xolfAutoStarted - True
  • soFinishRetaining - False
Tomu som nevenoval pozornosť. Ani neviem čo jednotlivé voľby znamenajú.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #17 kdy: 18-10-2020, 20:36:13 »
Pokračujem v sekcii "Obecné"

W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #18 kdy: 19-10-2020, 18:10:05 »
Ja som z toho už... Prestalo mi to fungovať všade!!!
Prikladám momentálne nastavenia, aby som predišiel všetkým nedorozumeniam. Viac transakcií nemám.
  • Transaction
  • UpdateTransaction
  • Connection
Jednoducho novo založený záznam Locate() nevidí. Aj pri jednoduchej tabuľke (číselník), kde inde nesiaham.
Začínam mať z toho tiky.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #19 kdy: 19-10-2020, 21:20:53 »
Už si hľadám niečo na urobenie slučky >:( . Jednoducho zmeny v tabuľkách sú v rámci formulára neviditeľné. Po jeho znovu otvorení sú viditeľné. Čo už len môže byť zlé na tomto kóde.
Kód: [Vybrat]
function TRoomTitle.DataOK: Boolean;
begin
  FCustomDB.PostRecord(True);
//  Pridaná kontrola. Predtým prebehne samotné Locate s takým istým výsledkom
Qry := TFDFunction.NewQryRead(nil);
Qry.SQL.Text := 'SELECT * FROM ROOMTITLES WHERE IDROOMTITLES = :IDROOMTITLES';
Qry.ParamByName('IDROOMTITLES').asinteger := FCustomDB.NewPKey;  //  OK 101 %
TFDFunction.QryOpen(Qry);
ShowMessage(IntToStr(Qry.recordCount)); //  = 0
...
end;
.
procedure TCustomDB.PostRecord(AAutoCommit: Boolean);
begin
  FTable.UpdateTransaction.StartTransaction;
    FTable.Post;
    FTable.UpdateTransaction.Commit;
    FinalPostRecord(AAutoCommit);  //  Nerobí sa nič s tabuľkou
Ja sa nemôžem bez toho hnúť. Už som všetko dookola 100 x skontroloval ako blbec. Všetko mi sedí. Žiaľ, krištáľovú guľu som daroval. Nevedel som, že ju budem potrebovať.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1109
  • Karma: 47
    • Verze Delphi: 10.3
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #20 kdy: 19-10-2020, 21:26:23 »
A jakou transakci používá Qry? Není to nějaká dřívější, která prostě nevidí změny provedené v transakci FTable.UpdateTransaction?

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #21 kdy: 19-10-2020, 21:59:36 »
fdtrFocRead - Pre tabuľky a Query typu SELECT Transaction
fdtrFocUpdate - pre tabuľky UpdateTransaction a Query Transaction, ktoré nevracajú DataSet
.
Tiež mi nejde do hlavy, že ak formulár zavriem a znova otvorím tak to je OK. Veď tam už s údajmi ani transakciami nič nerobím. Samozrejme okrem načítania údajov. Nepoužívam DBGrid, ale VST.

« Poslední změna: 19-10-2020, 22:06:48 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #22 kdy: 19-10-2020, 22:08:30 »
Až teraz som pochopil Tvoju otázku. Sú to dve rozdielne transakcie. Vraj by to malo byť v poriadku. No asi som to zle pochopil. Vyskúšam to.
Dočerta, máš pravdu! Pri test s query to zbehlo. Ale čo s Locate()? To je ako napojené na tabuľku, že to nenačíta?
.
Tak ako to mám robiť, keď som dostal odporúčania na načítanie používať jednu a na zmenu údajov inú transakciu? To ma domotalo.
Alebo mám transakcii fdtrFocUpdate meniť pred použitím parametre? To sa mi nepozdáva.
.
Základ je, že si mi našiel chybu. Už to len urobiť tak, ako sa sluší a patrí.
« Poslední změna: 19-10-2020, 22:17:18 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Online Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5447
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #23 kdy: 19-10-2020, 22:34:22 »
Je to spôsobené nesprávnym nastavením izolácie. Mám predvolenú - nešpecifikovanú. Ak som vyskúšal Dirty, tak to išlo. Už len zistiť, ktorá je pre mňa tá správna.
Asi to bude ReadCommited.
« Poslední změna: 19-10-2020, 22:36:33 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.