Autor Téma: Query..Text - divné správanie, zázraky  (Přečteno 651 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Query..Text - divné správanie, zázraky
« kdy: 10-11-2020, 12:31:24 »
Text vytváram dynamicky. Je to prosté poskladanie viacerých textov. Konečný tvar je vždy rovnaký. Momentálne aj parametre.
Čas vykonania bol cez 18 sek. Hodil som celý text do DB manažéra. Čas 0,2 sek. Urobil som tak aj v IDE. Čas 0,2 sek. Nakoniec som našiel časť, ktorá to spôsobovala. Nič som tam nenašiel. Nejakými trikmi mi to behalo za 0,2 sek. aj pri dynamickej tvorbe textu. S tým so včera ukončil prácu.
Dnes to spustím a opäť to trvá 18 sek :o
Stretol sa niekto s podobným správaním? Tuší niekto o čo sa jedná? Ďakujem.
FB ver. 3.0.7 + FireDAC
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline paja666

  • Nováček
  • *
  • Příspěvků: 48
  • Karma: 0
    • Verze Delphi: 10.4.1 Sydney
Re:Query..Text - divné správanie, zázraky
« Odpověď #1 kdy: 10-11-2020, 12:34:22 »
Jestliže se to nedá krokovat a najít operace, která trvá dlouho, pak je tu možnost to spustit a ve chvíli, kdy to "stojí" stisknout v IDE tlačítko Pause a ukáže se aktuální call stack a místo, kde se program nachází.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #2 kdy: 10-11-2020, 12:36:32 »
Dlho trvá samotné vykonanie dopytu. Mimo môjho kódu.
Je to niečo s N_Final.
Môžem to skúsiť, ale call stack neviem čítať. Neverím, že mi to pomôže. Prikladám texty
Kód: Delphi [Vybrat]
  1. procedure TConsumption.TConsumeOw.CreateSQL;
  2. begin
  3.   inherited;
  4.   FqryUI.SQL.Text := FqryUI.SQL.Text + N_Purge;
  5. end;
  6.  
  7.  
  8. function TConsumption.TConsumeOw.N_Final: string;
  9. begin
  10.   Result :=
  11.   '(SELECT C.FKOWNER_FLAT, DOT.FKSERVICEPARAMETERS, DOT.FKCAANALYTICOPTIONS, DOT.FKSUBACCOUNTS, C.FKMETERS,'+
  12.     ' MP.FKMETERTYPES, C.READING AS READFINAL, C.NUMBER AS N_FINAL, C.CORRECTION, C.KINDSTATE, M.COEFMETER,'+
  13.     ' M.COEFLOCATION,'+
  14.     ' CASE'+
  15.       ' WHEN C.KINDSTATE = :WITHOUTREADING THEN MP.WITHOUTREADING'+
  16.       ' WHEN C.KINDSTATE = :TAMPERING THEN MP.TAMPERING'+
  17.       ' ELSE 1'+
  18.     ' END AS PENALTY'+
  19.   ' FROM CONSUMPTIONS C'+
  20.    ' INNER JOIN METERS M ON (C.FKMETERS = M.IDMETERS)'+
  21.    ' INNER JOIN METERPENALTIES MP ON (M.FKMETERTYPES = MP.FKMETERTYPES) AND (M.FKFOCS = MP.FKFOCS)'+
  22.    ' INNER JOIN OWNER_FLAT ON (C.FKOWNER_FLAT = OWNER_FLAT.IDOWNER_FLAT) AND (OWNER_FLAT.FKFLAT = M.FKFLATS)'+
  23.    ' INNER JOIN DAY_COST_OW_TOTALS DOT ON (OWNER_FLAT.IDOWNER_FLAT = DOT.FKOWNER_FLAT)'+
  24.    ' INNER JOIN SEPA_ANALS SA ON (DOT.FKSERVICEPARAMETERS = SA.FKSERVICEPARAMETERS)'+
  25.       ' AND (M.FKSERVICES = SA.FKSERVICES) AND (DOT.FKCAANALYTICOPTIONS = SA.FKCAANALYTICOPTIONS)'+
  26.   ' WHERE'+
  27.     ' ((C.READING BETWEEN :UPPERBEGIN AND :UPPEREND)'+
  28.       ' OR'+
  29.     ' ((C.READING BETWEEN :LOWEREND1 AND :UPPERBEGIN) AND (C.KINDSTATE = :KS2)))'+
  30.       ' AND (MP.YEARFROM <= :YEARS) AND ((MP.YEARTO >= :YEARS) OR (MP.YEARTO IS NULL))) F';
  31. end;
  32.  
  33.  
  34. function TConsumption.TConsumeOw.N_Initial: string;
  35. begin
  36.   Result :=
  37.   '(SELECT C.FKFOCS, SA.YEARS, C.FKOWNER_FLAT, DOT.FKSERVICEPARAMETERS,'+
  38.     ' DOT.FKCAANALYTICOPTIONS, DOT.FKSUBACCOUNTS, C.FKMETERS, C.READING READINITIAL, C.NUMBER N_INITIAL'+
  39.   ' FROM CONSUMPTIONS C'+
  40.     ' INNER JOIN METERS M ON (C.FKMETERS = M.IDMETERS)'+
  41.     ' INNER JOIN METERPENALTIES MP ON (M.FKMETERTYPES = MP.FKMETERTYPES)'+
  42.       ' AND (M.FKFOCS = MP.FKFOCS)'+
  43.     ' INNER JOIN OWNER_FLAT ON (C.FKOWNER_FLAT = OWNER_FLAT.IDOWNER_FLAT)'+
  44.       ' AND (OWNER_FLAT.FKFLAT = M.FKFLATS)'+
  45.     ' INNER JOIN DAY_COST_OW_TOTALS DOT ON (OWNER_FLAT.IDOWNER_FLAT = DOT.FKOWNER_FLAT)'+
  46.     ' INNER JOIN SEPA_ANALS SA ON (DOT.FKSERVICEPARAMETERS = SA.FKSERVICEPARAMETERS)'+
  47.       ' AND (M.FKSERVICES = SA.FKSERVICES) AND (DOT.FKCAANALYTICOPTIONS = SA.FKCAANALYTICOPTIONS)'+
  48.   ' WHERE'+
  49.     ' ((C.READING BETWEEN :LOWERBEGIN AND :LOWEREND)'+
  50.       ' OR'+
  51.     ' ((C.READING BETWEEN :LOWEREND1 AND :UPPERBEGIN) AND (C.KINDSTATE = :KS1))'+
  52.       ' AND (MP.YEARFROM <= :YEARS) AND ((MP.YEARTO >= :YEARS) OR (MP.YEARTO IS NULL)))) I';
  53. end;
  54.  
  55.  
  56. function TConsumption.TConsumeOw.N_Purge: string;
  57. begin
  58.   Result :=
  59.   'SELECT GEN_ID(SETTLEMENT_ID, 1), I.FKFOCS, I.YEARS, F.FKOWNER_FLAT, F.FKSERVICEPARAMETERS,'+
  60.     ' F.FKCAANALYTICOPTIONS, F.FKSUBACCOUNTS, F.FKMETERTYPES, F.FKMETERS, I.READINITIAL DATEFROM, I.N_INITIAL,'+
  61.     ' CASE'+
  62.       ' WHEN F.READFINAL > :LASTDATE THEN :LASTDATE'+
  63.       ' ELSE F.READFINAL'+
  64.     ' END AS DATETO,'+
  65.     ' F.N_FINAL, F.N_FINAL - I.N_INITIAL AS N_READING, F.COEFMETER, F.COEFLOCATION,'+
  66.     ' CASE'+
  67.       ' WHEN F.KINDSTATE > :KS2 THEN 0'+
  68.       ' ELSE F.N_FINAL - I.N_INITIAL'+
  69.     ' END * F.COEFMETER * F.COEFLOCATION AS N_COEF,'+
  70.     ' CASE'+
  71.       ' WHEN F.KINDSTATE > :KS2 THEN 0'+
  72.       ' ELSE F.CORRECTION'+
  73.     ' END AS CORRECTION,'+
  74.     ' CASE'+
  75.       ' WHEN F.KINDSTATE > :KS2 THEN 0'+
  76.       ' ELSE F.N_FINAL - I.N_INITIAL + F.CORRECTION'+
  77.     ' END * F.COEFMETER * F.COEFLOCATION AS N_CORR,'+
  78.     ' F.KINDSTATE'+
  79.   ' FROM ' +
  80.     N_Initial +
  81.       ' INNER JOIN '+
  82.         N_Final+
  83.     ' ON (I.FKOWNER_FLAT = F.FKOWNER_FLAT) AND (I.FKSERVICEPARAMETERS = F.FKSERVICEPARAMETERS)'+
  84.       ' AND (I.FKCAANALYTICOPTIONS = F.FKCAANALYTICOPTIONS) AND (I.FKSUBACCOUNTS = F.FKSUBACCOUNTS)'+
  85.       ' AND (I.FKMETERS = F.FKMETERS)';
  86. end;
« Poslední změna: 10-11-2020, 12:40:43 od Stanislav Hruška »
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #3 kdy: 10-11-2020, 14:11:47 »
To zase vypada na nejake cachovani dat... Testujes to spatne - to musis vyjit z vychoziho stavu a srovnavat tak srovnatelne, napr.
1. restart pocitace, spustit DB manager, spustit SQL prikaz napr. 3x po sobe a zmerit casy a zapsat je
2. restart pocitace, spustit aplikaci, spustit SQL prikaz take 3x po sobe a zmerit casy a zapsat je.

A teprve, kdyz se ti budou vyrazne lisit casy zejmena 1. pokusu, tak neco resit. A pokud to bude srovnatelne, tak je to dane nactenim dat do bufferu, takze nasledne operace nad stejnymi daty jsou vyrazne rychlejsi do te doby, nez se obsah bufferu ztrati ev. je nahrazen necim jinym. Ale to uz jsme tady resili.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #4 kdy: 10-11-2020, 14:30:41 »
Vďaka. Možno to vyskúšam. Teraz ma vytáča skutočnosť, že v DB manažéry dostanem 450 a v D 1 125 záznamov. Vidím v čom je rozdiel, len si to neviem vysvetliť :'( :'( :'(
Texty sú totožné!!!
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #5 kdy: 10-11-2020, 15:10:54 »
Vďaka. Možno to vyskúšam. Teraz ma vytáča skutočnosť, že v DB manažéry dostanem 450 a v D 1 125 záznamov. Vidím v čom je rozdiel, len si to neviem vysvetliť :'( :'( :'(
Texty sú totožné!!!
Zalezi, jak presne ten pocet kontrolujes, jestli count() nebo jen to, co ti select pise pod tabulkou v DB manageru - ty manazery mivaji bezne omezen pocet zaznamu, takze to muze byt jen zkresleni manageru

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #6 kdy: 11-11-2020, 13:30:07 »
Tak som si dal na tom záležať a prešiel to do detailu.
  • V oboch prípadoch sa jedná o 450 záznamov. Na 1 125 sa doplňuje v ďalších krokoch. Tie nespúšťam
  • Texty sú rovnaké. Akurát v DB manažéri nepoužívam parametre. Hodnoty sú zadané natvrdo
  • DB manažér to má okamžite, aplikácia cez 15 sek. Použil som priamo FqryUI.ExecSQL;
Pri písaní mi napadlo to vyskúšať bez parametrov. A div sa, je to do 1 sek. Mám čo analyzovať. Snáď to vyjde.

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

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #7 kdy: 11-11-2020, 14:15:29 »
Čo som urobil:
  • Pre CASE som všetky konštanty v podmienkach zadal priamo do textu - vyhodil parametre
  • Pôvodný text nahradil testovacím. Lebo ináč som mal dlhý čas ???
Vyzerá to, aj po vypnutí PC, že mám čas pod 1 sek. S niečím takým som sa ešte nestretol.

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

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #8 kdy: 11-11-2020, 19:21:10 »
  • Pre CASE som všetky konštanty v podmienkach zadal priamo do textu - vyhodil parametre
  • Pôvodný text nahradil testovacím. Lebo ináč som mal dlhý čas ???
No, jestli je to pravda a ma to obecnou platnost, tak jsi objevil dalsi slabe misto FB. To by skoro stalo zato zeptat se primo ptaku ohnivaku, co oni na to.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #9 kdy: 11-11-2020, 19:57:22 »
S tou otázkou si nie som istý. Vyhodil som text a nahradil ho iným, ale obsahovo totožným. A začalo to ísť. No boli tam aj tie parametre.
A tak neviem či to boli tie parametre, alebo ten text, či oboje spolu? Skúmať sa mi to už nechce.
Ale asi sa opýtam.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #10 kdy: 11-11-2020, 22:56:26 »
Ale asi sa opýtam.
Smysl by melo se ptat jen v pripade, ze by sis byl jist temi parametry u WHEN a dokazal to prezentovat na nejakem opakovatelnem prikladu...

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #11 kdy: 12-11-2020, 08:23:55 »
V DB manažéri sa mi to nepodarilo zopakovať. Netuším, kde bol zakopaný pes.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #12 kdy: 12-11-2020, 11:46:32 »
V DB manažéri sa mi to nepodarilo zopakovať. Netuším, kde bol zakopaný pes.
Az priste zase narazis na podobnou ducharinu, nechces hned na zacatku pred detailnejsim zkoumanim udelat restart PC?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #13 kdy: 12-11-2020, 11:57:19 »
Tu som to výnimočne urobil :)
Nemyslím si, žeby v tom mal prsty FireDAC. To by sa už dávno našlo.
Podľa všetkého to bolo spojené s mojim kódom. Ale ten sa obsahovo vôbec nezmenil. Ani som nemal hlásené nekorektné ukončenie riadku. Okrem iného mám vo zvyku medzi DB manažérom a Delphi text najprv dať do PsPad. To platí všeobecne pri prenose textu medzi rôznymi aplikáciami a Delphi.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #14 kdy: 12-11-2020, 13:50:42 »
Tu som to výnimočne urobil :)
No me to pripomela ikonka, ze moje Windows vyzaduji restart a mam vyzkouseno, ze se pak cely system provozovany bez restartu muze chovat dost zhovadile. Ale u tebe je cetnost vyskytu duchariny, ktera sama mizi, aniz by byla lokalizovana, extremne vysoky. Proto bych zacal tim resetem a pokracovanim ze stavu nula. Dost velkou neplechu dokaze take napr. prehrivani pocitace (kdys naposled vyfoukal pocitac?), zacinaji porucha pameti nebo zdroje apod.

Citace
Okrem iného mám vo zvyku medzi DB manažérom a Delphi text najprv dať do PsPad. To platí všeobecne pri prenose textu medzi rôznymi aplikáciami a Delphi.
Ja jsem kdysi take psal SQL rozlamany na radky jako string do kodu a mel jsem makra, ktera dokazala prasit ten text do/z SQL, aby se dal prenaset mezi DB managerem a kodem. Pak jsem leta delal v C# a LINQ, kde jsem si zvykl, ze dotaz je primo soucasti jazyka, podleha typove kontrole prekladacem, zadne praseni stringu.

Tak kdyz jsem byl nucen delat znovu neco v Delphi, tak jsem to praseni SQL ve stringach uz nedokazal vydejchat a uchylil jsem se k technice, ze jsem si nadelal datamoduly s TFDCommand a do nich jsem ty SQL dotazy nastrkal a z nich si je bral napr. do query aj. Prenos mezi DB managerem a aplikaci pak bylo proste copy&paste v obou smerech.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #15 kdy: 12-11-2020, 14:56:44 »

Tá ducharina je dosť často spojená s mojim spôsobom práce/myslenia. Dostanem nápad a hneď ho realizujem. Samozrejme, že to nemôže dopadnúť dobre.
Mal by som o tom popremýšľať, urobiť si analýzu, nakresliť si to... Ak sa mi podarí absolvovať tieto kroky, tak robota ide sama od seba a zvyčajne bez zásadných chýb.
No niektoré si neviem vysvetliť. Toto je práve takýto príklad. Problém je v tom, že som urobil dva kroky naraz a preto neviem povedať kde to viazlo.
Citace
Proto bych zacal tim resetem a pokracovanim ze stavu nula. Dost velkou neplechu dokaze take napr. prehrivani pocitace (kdys naposled vyfoukal pocitac?), zacinaji porucha pameti nebo zdroje apod.
Ten reset budem musieť robiť častejšie. Veď to netrvá dlho. Počítač (HAL3000 EliteWork) som kúpil 8.8.2018. Záruka je podľa dodacieho listu. Ten nemám. Ja si pamätám 3 roky, takže doň nebabrem.
Citace
Tak kdyz jsem byl nucen delat znovu neco v Delphi, tak jsem to praseni SQL ve stringach uz nedokazal vydejchat a uchylil jsem se k technice, ze jsem si nadelal datamoduly s TFDCommand a do nich jsem ty SQL dotazy nastrkal a z nich si je bral napr. do query aj. Prenos mezi DB managerem a aplikaci pak bylo proste copy&paste v obou smerech.
Tiež by som to rád mal ináč. Aj sme o tom mali nejakú debatu. Lenže niektoré sa skladajú dynamicky až za behu programu - napr. voľby užívateľa.
Pri prenose do manažéra používam PSPad na odstránenie "prebytočných" znakov a nahradenie parametrov konštantami. Ide to celkom rýchlo.
Opačný prenos trvá dlhšie. Ten zvyknem robiť len na začiatku, keď ten SQL text dávam dokopy pomocou manažéra.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3119
  • Karma: 136
    • Verze Delphi: D2007, XE3, DX10
Re:Query..Text - divné správanie, zázraky
« Odpověď #16 kdy: 12-11-2020, 19:35:13 »
Lenže niektoré sa skladajú dynamicky až za behu programu - napr. voľby užívateľa.
No to ja taky skladam, ale v podstate jen podminene pripojuju vyrazy ve where klauzuli podle nastaveni filtru a order by klauzuli, kteru mi vetsinou generuje nas grid.

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 1147
  • Karma: 49
    • Verze Delphi: 10.3
Re:Query..Text - divné správanie, zázraky
« Odpověď #17 kdy: 13-11-2020, 09:18:20 »
Tá ducharina je dosť často spojená s mojim spôsobom práce/myslenia. Dostanem nápad a hneď ho realizujem. Samozrejme, že to nemôže dopadnúť dobre.

Jen pro jistotu - když řešíš rychlost dotazu, je potřeba testy opakovat a dívat se především na nejlepší výsledek.

Typicky po restartu bude první spuštění dotazu a načtení všech jeho výsledků pomalejší, než když ten samý dotaz spustíš znovu, protože Firebird a/nebo Windows budou před dalším spuštěním už mít nějaká data v cache (tj. v RAM), takže mnohonásobně rychleji dostupná. S plotnovým diskem a velkou databází ten rozdíl bude veliký, s SSD to tak dramatické nebude (plotnový disk bude zvládat řádově 100-200 požadavků na čtení/zápis z jiné části disku, protože tam musí nejprve dojet hlavičkami a počkat, až se plotny příhodně pootočí, u SSD to bude řádově spíše v rozmezí 20.000 - 200.000 takových požadavků za sekundu).

Pokud zkompiluješ aplikaci a spustíš ji, probíhá nejspíš na pozadí ještě zápis .dcu, .exe a kdo ví čeho dalšího na disk. Opět to ovlivní rychlost, se kterou Firebird (nebo jakákoli jiná databáze) může z téhož disku načítat svoje data.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5615
  • Karma: 42
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:Query..Text - divné správanie, zázraky
« Odpověď #18 kdy: 13-11-2020, 09:47:26 »
Ja som rýchlosť dopytov riešil len v extrémnych prípadoch. Jednalo sa o naozaj neprimerane dlhé časy. Pomohol si mi niektoré veci vyriešiť pomocou EXISTS. Vedel som o ňom, ale som si myslel, že to bude pomalé. Lebo sa volá ďalší dopyt :D  No výsledok mi vyrazil dych. Konečné výsledky boli o niekoľko rádov rýchlejšie.
O tých veciach viem. Vždy robím niekoľko porovnaní časov. Porovnávam si aj časy z DB manažéra a aplikácie.
Testoval som si to aj nad big dátami. Aj keď tu nebola dodržaná integrita údajov. Aké v aplikácii určite nebudú. Predpokladám, žeby som sa z tohto pohľadu nemal dočkať prekvapenia.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.