Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Delphi 7 + ADO, querry u querry-ju

[es] :: Pascal / Delphi / Kylix :: Delphi 7 + ADO, querry u querry-ju

[ Pregleda: 2374 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

milan che

Član broj: 225022
Poruke: 10
*.dynamic.sbb.rs.



Profil

icon Delphi 7 + ADO, querry u querry-ju15.06.2009. u 17:38 - pre 179 meseci
Krenuo sam da ucim o bazama, nasao sam dosta na forumu o ADO-u i Delphiju, napravio neke mini bazice i interfejs. Ono sto nisam nasao (ili sam mozda prevideo) je kako bih mogao iskoristiti jedan Querry da bih iz njega i nekih drugih tabela napravio drugi Querry (to sam radio u Accessu, al imam problema sa tim u Delphiju). Da probam malo bolje pojasniti sta ocu. Znaci, recimo da imam 15-ak tabela. Onda napravim jedan Querry koji mi daje podatke od interesa iz nekoliko tabela. E sad mi treba jos jedan Querry koji ce vuci podatke iz tog prvog Querry-ja i iz jos nekih tabela. Znaci zanima me da li se moze i u Delphiju koristiti ta opcija "querry u querry-ju" kao u Accessu.
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.dial-up.dsl.siol.net.



+14 Profil

icon Re: Delphi 7 + ADO, querry u querry-ju15.06.2009. u 19:20 - pre 179 meseci
Kratak odgovor:
Ne.

Dug odgovor:
TQuery i TADOQuery povuku podatke sa DB servera ili nekog drugog data provider-a kada pozoves T(ADO)Query.Open. Prilikom poziva Open query komponenta prosledjuje sql text provajderu direktno bez ikakve promene, tj. Delphi nema blagu predstavu sta si ti u query napisao da hoces. Cim podaci stignu od provajdera kopiraju se u internu memorijsku strukturu query objekta u tabelarnoj formi, i od tog trenutka na dalje mozes da citas podatke sa FieldByName ili FindField metodama. Jednom otvoreni query ne moze da sluzi kao dataprovider za drugi query zbog toga sto se podaci transformisu-izravnaju u tabelarnu strukturu koja nema nikakve informacije o tome koje polje je odakle doslo. Ono sto mozes da uradis, sto se i inace radi u svim komplikovanijim aplikacijama, je da dinamicki kreiras/dopunjavas SQL tekst tokom izvrsavanja programa i da koristis parametre. Takodje mozes i jednom otvorni query da dodatno filtriras sa TQuery.Filter i TQuery.Filtered, mada je to ograniceno i u smislu mogucosti i performansi.

if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

milan che

Član broj: 225022
Poruke: 10
*.dynamic.sbb.rs.



Profil

icon Re: Delphi 7 + ADO, querry u querry-ju16.06.2009. u 00:50 - pre 179 meseci
Hvala Borise na odgovoru. :)

Pogledacu onda malo po netu oko koriscenja parametara.

Ono sto mi je nejasno jeste kako bih "spojio" sledeca dva kverija.

Query1:
Code:

SELECT 
tabela1.nazivPolja1, tabela2.nazivPolja2, …

FROM 
tabela1 INNER JOIN …nesto… ON tabela1.nazivPolja10 = tabela2.nazivPolja11

WHERE 
(((tabela1.nazivPolja1) = uslov1) AND ((tabela3.nazivPolja3) = uslov2) 

ORDER BY tabela2.nazivPolja2;


Query2
Code:

SELECT 
Query1.nazivPolja2, tabela6.nazivPolja1, tabela6.nazivPolja3, …

FROM 
((Query1 INNER JOIN tabela8 ON Query1.nazivPolja4 = tabela8.nazivPolja13) 
INNER JOIN tabela6 ON tabela8.nazivPolja14 = tabela6.nazivPolja14) 
INNER JOIN tabela7 ON tabela8.nazivPolja15 = tabela7.nazivPolja4

GROUP BY 
Query1.nazivPolja2, tabela6.nazivPolja1, tabela6.nazivPolja3, …

HAVING (((tabela6.nazivPolja1) Like uslov4));

gde ... kod SELECT oznacavaju jos nekoliko izabranih tabela, a ...nesto... oznacava nekoliko ugnjezdjenih INNER JOIN-ova.

Ovo je SQL koji je Access izbacio, izostavio sam gore naglaseno zbog preglednosti, ako treba mogu ubaciti. Bilo bi dobro bar da dobijem neke smernice u kom pravcu da razmisljam, posto nisam radio mnogo sa SQL-om, bar ne ovakve malo komplikovanije upite.

 
Odgovor na temu

rambo
Dejan Petković
Beograd

Član broj: 6095
Poruke: 190
*.adsl.eunet.rs.



+6 Profil

icon Re: Delphi 7 + ADO, querry u querry-ju16.06.2009. u 08:04 - pre 179 meseci
Kao što ti Boris reče, to ne može tako u Delphi.

Jedna stvar koja mi prva pada na pamet, a da može da ti reši problem, jeste da koristiš VIEW. Ako su ti ti upiti "statički", odnosno ako se ne menja tekst upita, onda onaj prvi napraviš kao VIEW a onda ovaj drugi modifikuješ da koristi njega umesto ono "Query1".

Drugo, možeš da napraviš ugnježdeni Query (pod uslovom da DBMS koji koristiš to podržava). Ključna rečenica za to je SELECT FROM SELECT.

Ajde probaj tako nešto, pa ako zapneš pitaj.
"There is a theory which states that if ever anybody discovers exactly what the
Universe is for and why it is here, it will instantly disappear and be replaced by
something even more bizarre and inexplicable. There is another theory which states
that this has already happened."
-- Douglas Adams
 
Odgovor na temu

milan che

Član broj: 225022
Poruke: 10
*.dynamic.sbb.rs.



Profil

icon Re: Delphi 7 + ADO, querry u querry-ju16.06.2009. u 11:53 - pre 179 meseci
Hvala Dejane. Pokusao sam da nadjem nesto o koriscenju VIEW-a, ali mrka kapa za sada. Nasao sam samo jedan primer uradjen, ali nigde nisam nasao neko objasnjenje kako funkcionise i kako ga pravim u Delphiju. Ako ti imas neki link o tome ili te ne mrzi da ukratko objasnis, bio bi ti (jos jednom :)) vrlo zahvalan, to mi deluje kao fino resenje. Inace, upiti jesu staticki. Ja cu probati sada sa ovim drugim predlogom, to mi se cini da bi trebalo da znam da odradim, pa cemo videti sta ce ispasti.
 
Odgovor na temu

_deran_

Član broj: 69493
Poruke: 252
77.46.166.*



+1 Profil

icon Re: Delphi 7 + ADO, querry u querry-ju16.06.2009. u 18:34 - pre 179 meseci
te staticke upite u accessu bi delphi trebao da vidi kao tabele, ne znam da li si probao... probaj da odradis taj upit nad upitom u accessu i da ga nadjes u delphiu kao klasicnu tabelu. za upite sa parametrima koristi adostoredproc
 
Odgovor na temu

milan che

Član broj: 225022
Poruke: 10
*.dynamic.sbb.rs.



Profil

icon Re: Delphi 7 + ADO, querry u querry-ju16.06.2009. u 21:47 - pre 179 meseci
Probacu i tako, pa cemo videti. Uspeo sam u medjuvremenu da odradim posao sa jednim query-jem, kao neko privremeno resenje, dok ne sredim ovo. Hvala jos jednom svima na savetima.
 
Odgovor na temu

.:Marvin:.
Taurunum

Član broj: 36626
Poruke: 94
91.143.212.*



Profil

icon Re: Delphi 7 + ADO, querry u querry-ju17.06.2009. u 07:35 - pre 179 meseci
Sto si tice VIEW-a, ako se budes bavio ovim u zivotu nagledaces ih se, stoga mozes vec i da naucis o njima. Ovako uprosceno, VIEW je jedan SELECT iskaz, koji je sacuvan negde u bazi.
Primer:

CREATE VIEW MojView AS
SELECT * FROM MojaTabela1 INNER JOIN MojaTabela2 ON Mojatabela1.K1 = MojaTabela2.K1.

Ovakav VIEW kad napravis, podatke iz njega uzimas na sledeci nacin:

SELECT * FROM MojView. Rezultat ce biti isti kao da si pozvao SELECT * FROM MojaTabela1 INNER JOIN MojaTabela2 ON Mojatabela1.K1 = MojaTabela2.K1.

Poenta VIEW-a jeste da ako ces gornji JOIN koristiti cesto, ne pises ga svaki put. SQL kod ti bude cistiji, razumljiviji. U VIEW mozes da stavljas i unije vise upita, itd. Da ne duzim, procitaj malo o VIEW-ovima, pa ces videti zasto su dobri, i probaj da se nateras da ih koristis. Naravno, nije to sveto pismo, i koristi ih onda kada ima potrebe i smisla, ne po svaku cenu.

Pozdrav, i javi ako zapne.
 
Odgovor na temu

milan che

Član broj: 225022
Poruke: 10
*.dynamic.sbb.rs.



Profil

icon Re: Delphi 7 + ADO, querry u querry-ju17.06.2009. u 09:35 - pre 179 meseci
Hvala mnogo Marvine na pojasnjenju VIEW-a. :) Deluje dosta elegantije ovako preko njega. Svakako cu prouciti ovo, a verujem i koristiti. Pozdrav
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.dial-up.dsl.siol.net.



+14 Profil

icon Re: Delphi 7 + ADO, querry u querry-ju17.06.2009. u 18:34 - pre 179 meseci
View-ovi su mac sa dve ostrice. Sa jedne strane ti olaksaju zivot jer ti omogucavaju da reorganizujes podatke u upotrebljivu formu i onda lakse sa njima baratas. Problem sa druge strane je u tome sto su staticni. Na primer, ako imamo view:
Code:

CREATE VIEW ListaStranaka AS
  SELECT 
    s.ID_Stranka, s.Naziv, ts.TipStranke
  FROM
    Stranke AS s
  LEFT JOIN
    TipoviStranaka AS ts ON ts.ID_TipStranke = s.ID_TipStranke


Ako ti trebaju npr. samo kupci (ID_TipStranke = 2), ne mozes napisati
Code:

SELECT * FROM ListaStranaka WHERE ID_TipStranke = 2

...jer se polje ID_TipStranke ne nalazi u view-u. Ali to se da resiti ako dodamo jos jedno polje u view:
Code:

CREATE VIEW ListaStranaka AS
  SELECT 
    s.ID_Stranka, s.Naziv, s.ID_TipStranke, ts.TipStranke
  FROM
    Stranke AS s
  LEFT JOIN
    TipoviStranaka AS ts ON ts.ID_TipStranke = s.ID_TipStranke


Sada ce query [SELECT * FROM ListaStranaka WHERE ID_TipStranke = 2] da radi, ali kako? Prvo dovuce sve stranke (izvrsi ce select koji kreira view), pa tek onda se nad tim podacima izaberu (Selectuju) oni koji imaju ID_TipStranke = 2. To je jos i prihvatljivo za ovaj simple primer, ali sta ako imas milion stranaka ili ne daj boze aplikaciju za banku?

Da ne duzim, problemi pri svakom Selectu gde je dataprovider view a ne tabela su sledeci:
- Naknadno filtriranje je moguce samo po poljima koja su selectovana u view, cak iako znas strukturu tabela na kojima se view zasniva
- Najpre se izvrsi ceo view pa tek onda ostatak selecta
- Eliminises sve optimizacije DB Servera, jer forsiras execution planner da radi na tacno odredjen nacin

Upravo zbog ovih razloga view-ovi se u praksi koriste najcesce za male kolicine podataka ili za podatke koje ne treba naknadno filtrirati ili transformisati (npr. top 10 kupaca ili neki kumulativni izvestaj)

Btw., MSSQL 2005 omogucava tzv. indexed view-e koji su nesto brzi, ali su toliko ograniceni preduslovima da su neupotrebljivi.
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

milan che

Član broj: 225022
Poruke: 10
*.dynamic.sbb.rs.



Profil

icon Re: Delphi 7 + ADO, querry u querry-ju17.06.2009. u 20:45 - pre 179 meseci
Hvala Borise. Posto sam jos na pocetku da tako kazem rada sa bazama, necu odmah raditi sa velikim bazama pa cu pokusati da kroz male baze udjem u stos sa VIEW-om. A imacu na umu i nedostatke koje si naveo kada budem radio sa bazama sa mnogo podataka.
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Delphi 7 + ADO, querry u querry-ju

[ Pregleda: 2374 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.