Autor Téma: ADO - Multi query  (Přečteno 236 krát)

Offline panjavlik

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: 7
ADO - Multi query
« kdy: 24-07-2020, 14:19:48 »
Ahoj,

jsem Delphi začátečník a tvořím si pro radost. Narazil jsem na problematiku s kterou mi ani Google nepomohl a tak bych chtěl požádat radu zkušenějšcíh.

Používám:
1x TADOConnection v kterém mám nastavený "Connection string".
2x TADOQuery u které mám property "Connection" = "TADOConnection",  dále "SQL" s dotazem do DB.


1. Potřebuji rozdělit data za TADOQuery1 do 3 tabulek a nevím jakým způsobem lze filtrovat vstupní data do DBGrid (Používám LiveBinding v RAD Studio).
2. Když Close/Open obě TADOQuery, zůstávají mi vyset jako Session v Active Monitoru nad dotazovanou databází (do chvíle než "Neterminatnu" celý program) , zkoušel jsem "Closenout" s "Free" ale stále zůstávají vyset (TADOConnection mám KeepAlive zároveň je užit u obou query jako connection).

První problém je pro mě majoritní, přecejen tvořit kvůli rozdělení 2 další dotazy s WHERE se mi zdá jako hloupost :(

Mockrát děkuji za pomoc, vážím si každé rady.

Hezký den
JP

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2657
  • Karma: 103
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:ADO - Multi query
« Odpověď #1 kdy: 24-07-2020, 17:05:24 »
Jedna Query = jeden DBGrid, grid zobrazuje data z te sve query a dynamicky z neho cte data.

Mas 2 moznosti:
- nahradit DBGrid za neco jineho (treba ListView v modu Report, nebo stringgrid) a ten naplnit, pak uz query nepotrebujes
- pouzit 3 query
 
Cim se lisi ty dotazy? Normalne bych ti poradit 3x mem table a ty plnit z toho jednoho query s nastavenim Filter.

Ale pokud chces DBGrida tak v tvem pripade bude lepsi po startu priradit kazde query nejaky SQL s parametrem, tj. query1.SQL .... , query2.sql...
Embarcadero MVP - Czech republic

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5124
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ADO - Multi query
« Odpověď #2 kdy: 24-07-2020, 17:59:08 »
Keďže dopyty sa líšia iba v časti WHERE, tak je možné si celý SQLText, okrem WHERE uložiť do reťazca a tie WHERE do troch samostatných reťazcov Where1..3. Pri požiadavke na zmenu výberu v Query zmeniť text poskladaním z požadovaných reťazcov SQLTex + WhereN, DBGrid vyprázdniť a znova naplniť. S DBGrid nerobím, tak neviem ako to s ním je.
Vytvárať viac QUERY nie je až také strašné. Nezaberajú veľa pamäte. Ale ľahko sa stane, že sa v nich človek stratí.

Ja osobne používam vždy len jedno QUERY a texty vytváram dynamicky.
Pozor, odporúča sa do QUERY dať naraz celý kompletný SQLTex! Použitie Add() nie je práve najlepšie. Pri každom priradení textu sa totiž na pozadí vždy spúšťa jeho kontrola!
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 5124
  • Karma: 41
    • Verze Delphi: W10 + Delphi 10.4 professional
Re:ADO - Multi query
« Odpověď #3 kdy: 24-07-2020, 18:02:01 »
Ešte mi prišla na um dôležitá vec. Vždy dôsledne používaj parametre!
Možno si vystačíš len s jedným textom a budeš iba meniť parametre. V takom prípade sa používa Query.Refresh.
W10 64b, Delphi 10.4, FireBird 3.05
Expert na kladenie nejasne formulovaných otázok.

Offline panjavlik

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: 7
Re:ADO - Multi query
« Odpověď #4 kdy: 24-07-2020, 19:40:25 »
Dobrý večer ,

Moc děkuji za tak rychlé odpovědi, vážím si toho :-)

U mě je nejspíš problém i v tom , ze potřebuji naplnit 3 gridy z query na jednom formuláři.

Zajímavá mi přijde myšlenka naplnit memfile hodnotami a ten si pak snadno rozsekat jako zdroj pro string grid.

Používání dynamického query je skvělý nápad , mockrát diky za tip

Položil jsem dotaz , protože neznám možnosti Delphi a nevěděl jsem , zda-li neexistuje nějaká jednoduchá možnost přes property například :-)

Ohledně druhé otázky mi šlo o to , jestli nevadí ze mi na SQL serveru zůstávají v Activity monitory viset ty dotazy a zbytečně tak sql nedostává za uši :-)

Mockrát Vám děkuji ještě jednou

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2657
  • Karma: 103
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:ADO - Multi query
« Odpověď #5 kdy: 26-07-2020, 09:24:08 »
Ohledně druhé otázky mi šlo o to , jestli nevadí ze mi na SQL serveru zůstávají v Activity monitory viset ty dotazy a zbytečně tak sql nedostává za uši :-)

Zajímavé, co máš nastaveno u Query v property CursorLocation a CursorType ? Máš tam clUseClient ? Ještě můžeš po otevření nastavit Query.Connection := nil; coz by melo zpusobit v pripade ADO komponent ze se z toho stane lokalni query.
Embarcadero MVP - Czech republic

Offline panjavlik

  • Nováček
  • *
  • Příspěvků: 3
  • Karma: 0
    • Verze Delphi: 7
Re:ADO - Multi query
« Odpověď #6 kdy: 29-07-2020, 15:13:57 »
Ahoj,

CursorLocation: clUseClient
CursorType: Static


Zkusil jsem hodit na Event "AfterOpen"   AdoQuery1.Connection := nil; 

ale bohužel stále zůstavají otevřená.

Aktuálně to vypadá takto:
Formulář 1 - 1x Adoquery s přímým ConnectionStringem
Formulář 2 - 2x Adoqeury přes TadoConnection