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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Je to pokračovanie zo sekcie "Firebird"
Cítim v starých kostiach, že problém je v podformulároch a k ním prislúchajúcich tried.
.
Stručný popis
Základný subform Room vlastní subform Salle. TFDTable a TDataSource sú položené len na Room.
Salle má tri DBEdit-y. Priraďujem im DataSource z Room. V tomto smere to je čisté.
.
Problém vidím v skutočnosti, že oba oRoom a oSalle (triedy/objekty pre dané subform) majú FCustomDB. Tam sú automaticky uložené
  • DBEdit v FDBEditControls: TObjectList<TDBEditControl>
  • FDataSource
  • FTable
  • ...
Osobne si myslím, že problém problém spôsobuje práve opakované vlastnenie DataSource a Table. Tak sa vytvoria dve samostatné inštancie. Je to tak?
Mám len jedinú UpdateTransaction a spúšťam ju len jediný raz! Tabuľky a dopyty majú samostatnú/vlastnú Transaction.
FCustomDB nemôžem zrušiť. Aspoň som ešte nezistil spôsob, ktorým by to išlo.
.
Pri písaní som si uvedomil, že FDataSource a FTable nepotrebujem. Viem ich získať z hociktorého DBEdit. No netuším, či mi to vyrieši problém.
.
Idem sa teraz zbaviť FDataSorce a FTable v CustomDB. To trochu potrvá.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #1 kdy: 18-10-2020, 21:05:49 »
To odstraňovanie som si rýchlo rozmyslel :) Počkám si na výsledok diskusie.
Nerobí mi problém dať všetky DBEdit do oRoom. Žiaľ problém to nerieši.
« Poslední změna: 18-10-2020, 21:07:21 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #2 kdy: 18-10-2020, 22:26:04 »
Hurá, prišiel som na to, ako sa opýtať jednoducho:
oRoom
  FCustomDB: TCustomDB;
...
oSalle
  FCustomDB: TCustomDB;
...
V oboch prípadoch je v FCustomDB.Table tá istá tabuľka.
Ak v oSalle.CustomDB.Table vykonám akúkoľvek zmenu, tak sa mi prejaví aj oRoom.CustomDB.Table?
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline František

  • Guru
  • *****
  • Příspěvků: 596
  • Karma: 6
    • Verze Delphi: primárne v XE5, občas 10.2.3 comunity
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #3 kdy: 18-10-2020, 23:57:37 »
vo filme Dogma bol takýto monológ:
"Ja som Metatron - boži hlas, keď ti niekto povedal že sa rozprával s Bohom, tak sa rozprával so mnou, .... alebo sám so sebou"

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #4 kdy: 19-10-2020, 08:48:03 »
vo filme Dogma bol takýto monológ:
"Ja som Metatron - boži hlas, keď ti niekto povedal že sa rozprával s Bohom, tak sa rozprával so mnou, .... alebo sám so sebou"
;D ;D ;D
Obrovskú chybu mám v tom, že TSalle definujem ako pre všetky subform. Pritom to má byť
Kód: Delphi [Vybrat]
  1. TSalle = class
Ale i tak by som rád dostal odpoveď na poslednú otázku:
Citace
Ak v oSalle.CustomDB.Table vykonám akúkoľvek zmenu, tak sa mi prejaví aj oRoom.CustomDB.Table?
To je základná vedomosť, ktorú musím ovládať.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

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ěď #5 kdy: 19-10-2020, 13:23:13 »
Ale i tak by som rád dostal odpoveď na poslednú otázku:
Citace
Ak v oSalle.CustomDB.Table vykonám akúkoľvek zmenu, tak sa mi prejaví aj oRoom.CustomDB.Table?
To je základná vedomosť, ktorú musím ovládať.
Jestli jsi tam priradil odkaz na stejnou instanci Table, tak se samozrejme oba odkazy odkazuji na stejnou instanci Table, takze se z obou mist "divas/menis" porad na jednu Table. To se da prece snadno otestovat.

Jina otazka muze byt, jak to bude se synchronizaci/konzistenci dat a stavu tj. co v tom natropi pripojeni datasource a widgetu a s tim spojene pripadne obsluhy events na ruznych formularich. Ale to nevim, protoze bud jsme DB awared komponenty nepouzivali vubec nebo jsme meli vlastni vcetne vlastnich DataSource...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5450
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Locate() - nenájde nové záznamy v rámci životnosti formulára
« Odpověď #6 kdy: 19-10-2020, 15:34:46 »
Ďakujem za potvrdenie mojej domnienky.
S tou duhou časťou príspevku nemám problémy.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.