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

DBgrid osvezenje

[es] :: Pascal / Delphi / Kylix :: DBgrid osvezenje

[ Pregleda: 4669 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

erekoz
John Doe
Beograd

Član broj: 5960
Poruke: 148
*.tvmetropolis.com



Profil

icon DBgrid osvezenje13.10.2003. u 20:23 - pre 249 meseci

Pozdrav svima,

Imam jedan problem oko pretrazivanja baze i unosenja rezultata u dbgrid. Naime, treba da pretrazim bazu sa nekoliko reci ciji broj svaki put varira. Kako da rezultate pretrazivanja apendujem na DBgrid? Sada, ja pretrazim bazu prvom reci, dbgrid pokaze rezultate, i onda kada pretrazi bazu drugom recju, izbrise prethodne rezultate. Meni treba da svi rezultati ostanu u DBgridu...

Hvala unapred, erekoz
 
Odgovor na temu

Nub.Saibot
Srbija/BG

Član broj: 11838
Poruke: 99
*.direcpceu.com



Profil

icon Re: DBgrid osvezenje14.10.2003. u 08:45 - pre 249 meseci

Ja za takve stvari koristim komponentu iz Jedi VCL paketa, zove se JvMemoryData i predstavlja tabelu u memoriji. Nju mozes da punis rezultatima, a ostalo sve ostaje isto osim sto DBGrid koristi ovu tabelu, a ne query koji je do sada korstio. Inace jvMemoryData se koristi potpuno isto kao obicna komponenta TTable.

Pozdrav

P.S. Ovo moze da se izvede i sa nekim standardnim komponentama ali nisam to ranije radio pa zato pominjem resenje za koje znam kako radi. :)
 
Odgovor na temu

erekoz
John Doe
Beograd

Član broj: 5960
Poruke: 148
*.tvmetropolis.com



Profil

icon Re: DBgrid osvezenje14.10.2003. u 11:16 - pre 249 meseci

Ej, Nub, hajde malo pojasni kako se radi sa ovim Tjvmemorydata, malo sam zbunjen. Kako da ga povezem sa rezultatima SQL upita? Ima li nekog uputstva za koriscenje na sajtu? U help fajlu se ne pojavljuje...

 
Odgovor na temu

bogiboy
Preko bare

Član broj: 14097
Poruke: 9
*.multiactive.com



Profil

icon Re: DBgrid osvezenje15.10.2003. u 00:25 - pre 249 meseci
Druga varijanta ti je da kreiras novu tabelu u kojoj ces da cuvas rezultate pretrage a umesto TTable koristi TADODataSet komponentu ako koristis ADO ili TQuery ako ides preko BDE.
E sad ovako:
recimo tabelu nazoves TSearches i ona ima sledeca polja:
1. Record_id kao kljuc
2. Original_id - id rekorda iz tabele koju pretrazujes
3. Original_type - flagovi 1...n ako hoces ovde da trpas rezultate pretrage iz raznih tabela, recimo da ovu za koju pitas nazovemo 1

Umesto da pretragu radis klasicno ti kazes (kreiraj ADOComand ili TInsertSQL) :"INSERT INTO TSearches Original_id, Original_type
SELECT Record_id, 1 from TrazenaTabela WHERE (<tvoj serach kriterij);
Exacute; -- ovo treba da insertuje rezultate pretrage (ID-ove u TSearches tabelu)

a DBGrid vezes za TQuery ili TADODataset kao "SELECT DISTINCT TrazenaTabela.* from TrazenaTabela INNER JOIN TSearches ON (TTrazenaTabela,Record_id = TSearches.Original_id AND TSearches.Original_type = 1),

Na ovaj nacim mozes da rezultate pretrage cuvas kad se user sledeci put loguje (u tom slucaju dodaj u TSearches jos jedno pole :USERID gde cuvas user-dependent rezultate) a mozes i da obrises pri zatvaranju forme.
 
Odgovor na temu

Nub.Saibot
Srbija/BG

Član broj: 11838
Poruke: 99
*.direcpceu.com



Profil

icon Re: DBgrid osvezenje15.10.2003. u 10:37 - pre 249 meseci
Citat:
erekoz:

Ej, Nub, hajde malo pojasni kako se radi sa ovim Tjvmemorydata, malo sam zbunjen. Kako da ga povezem sa rezultatima SQL upita? Ima li nekog uputstva za koriscenje na sajtu? U help fajlu se ne pojavljuje...



Ajde sad cemo detaljnije:

1. Spustis komponentu TjvMemoryData na form :)

2. Dupli klik na komponentu da bi otvorio field properties. Desni klik na trenutno praznu listu polja i izaberes New field. Tu uneses podatke za potrebno polje. (popunjavas jedino name, Type i Size po potrebi) npr:
Name: SIF
Type: Integer
Kliknes na OK i time si dodao jedno polje.

3. Ponavljaj korak 2 dok ne dodas potrebna polja.

4. Sad u nekoj proceduri namestis prebacivanje rezultata upita u TjvMemoryData.
Code:

  Query1.Open;                              //Otvaramo upit

 if not MemData.Active Then MemData.Open;  //Ako nije tabela otvorena otvaramo je

 Query1.First;
 While not Query1.Eof do
 Begin
  MemData.Append;                          //Dodajemo jedan red u tabelu
  MemDataSIF.AsInteger := Query1SIF.AsInteger; //Upisujemo vrednosti iz query1 u MemData
  ...
  ...
  MemData.Post;
  Query1.Next;                             //Prelazimo na sledeci red rezultata
 End;

 Query1.Close;                             //Posto nam vise nije potreban upit zatvaramo ga


To je otprilike to, koriscenje je gotovo isto kao koriscenje TTable.


Pozdrav
 
Odgovor na temu

erekoz
John Doe
Beograd

Član broj: 5960
Poruke: 148
*.tvmetropolis.com



Profil

icon Re: DBgrid osvezenje15.10.2003. u 11:20 - pre 249 meseci

Hej Nub, hvala, sad cu da probam tvoj kung fu...
 
Odgovor na temu

silverglider

Član broj: 651
Poruke: 218
*.batalpha.de

Sajt: www.benchmark.co.yu


Profil

icon Re: DBgrid osvezenje15.10.2003. u 12:36 - pre 248 meseci
Ne razumem potrebu za novim komponentama?

Svaka komponenta koja moze da primi SQL komande moze to da uradi i vrati rezultujuci set izabran po vise kriterijuma. Stavis samo da ti je za taj dbgrid osnova tipa "select * from mojatabela" i samo dodajes uslove - prvi ce biti "where kriterijum1", pa od drugog do kraja idu "and kriterijum-n" (na kraj dodas ukoliko ti treba sortiranje ili grupiranje rezultata). One komponente koje prihvataju tu SQL komandu kao jedan string formiras prostom konkatenacijom stringova (imas i lepu Format komandu za printf stil popunjavanja stringova), a one komponente koje primaju SQL skripte kao tstringlist, formiras jednostavno takvu varijablu:

slSQLcommand.add('SELECT * FROM moja_tabela');
if trt-mrt then
slSQLcommand.add(Format('WHERE id > %d', [mojindex]));
(itd).
myQuery.SQL := slSQLcommand;

Stavis prepare na false i uradis open/close queryja. Kako ti se uslovi i broj kriterijuma menjaju, insertujes ili brises linije u tom stringlistu i ponovo refreshujes query. To ce cesce raditi brze nego da se vadi jedan dataset, pa se onda radi petlja (until eof) i onda u svakom loopu radi append/post. Pogotovo kada lepo biras i kombinujes vec postojece standardne komponente; neke su brze, jer kesiraju u memoriji (ali se koriste za manje rezultantne datasetove), druge mogu da prime mnogo veci dataset kao rezultat, ali ne kesiraju, pa mozes da ih kombinujes, uvedes dataprovidere, itd.
 
Odgovor na temu

xkolja
Kolja Kuzev

Član broj: 6475
Poruke: 31
195.252.103.*



Profil

icon Re: DBgrid osvezenje16.10.2003. u 06:55 - pre 248 meseci
Prvo, nisi naveo dali "reci" sa kolima pretrazijes tabelu pripadaju istom polju u tabeli ili razlicitim poljima u tabeli.

Evo ti jednog primera gde jednu tabelu pretrazujem po dva polja i trazim dali na nekom od tih polja postoji slicnost.


procedure TObvForm.Edit1Change(Sender: TObject);
begin
obv.Close;
obv.Params[0].AsString:=Edit1.Text;
obv.Open;
end;

obv je ime SQLClientDataSet-a

upit izgleda ovako:

Select polje1, polje2, polje3 from MojaTabela
where (polje2 containing :pin) or (polje1 starting with :pin)


u ovom slucaju polje jedan i polje dva treba da budu istog tipa (ovde je to string).
i rezultati se preko svega sto treba prikazuju u jednom DBGrid-u.

a mozes i kada ti se povacava broj reci po kojima pretrazujes naprimer jedno polje da menjas tekst upita:

pretrazivanje sa jednom recju:

Select polje1, polje2, polje3 from MojaTabela
where polje2 containing :pin


pretrazivanje sa dve reci:

Select polje1, polje2, polje3 from MojaTabela
where (polje2 containing :pin1) and (polje2 containing :pin2)

tako ces dobiti sve slogove (recorde) u kolima se reci nalaze pin1 i pin2 bez obzira na rdosled.

pin, pin1 i pin2 su parametri, a upiti su parametarski upiti.
 
Odgovor na temu

Nub.Saibot
Srbija/BG

Član broj: 11838
Poruke: 99
*.direcpceu.com



Profil

icon Re: DBgrid osvezenje16.10.2003. u 09:49 - pre 248 meseci

Totalno sam prevideo jednostavno resenje koje je naveo silverglider jer sam u prvom odgovoru erekozu imao na umu da njemu treba neki rezultat koji nije moguce vratiti jednim upitom pa sam zbog toga pomenuo MemoryData komponentu.

Pozdrav
 
Odgovor na temu

silverglider

Član broj: 651
Poruke: 218
*.batalpha.de

Sajt: www.benchmark.co.yu


Profil

icon Re: DBgrid osvezenje16.10.2003. u 11:38 - pre 248 meseci
Samo jedna napomena glede dodatnih komponenti; generalni stil programiranja bi trebao da bude takav da stvari resava sa postojecim, standardnim komponentama frameworka (i njihovim nasledjivanjem, naravno), a koliko-toliko izbegavati externe male komponente - ukoliko je to moguce, naravno. Pogotovo ako se radi o programu koji ce nastaviti da se razvija i planira se novija verzija kad-tad. Uglavnom zbog deploymenta - prvo, covek koji je razvijao neku komponentu moze sutra da prestane da je razvija, a bio je na raspolaganju samo njen binarni oblik (ne i source) i ne radi dobro pod novim razvojnim alatom; moze dalje da se desi da covek/firma promene prava koje se odnose na tu komponentu, pa zatreba placanje licenci, itd. Osim ako se sa komponentom ne dobija source i prava da se sa time radi svasta (i u komercijalne svrhe), naravno. Sorry na off-topicu.

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: DBgrid osvezenje

[ Pregleda: 4669 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

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