• 21 odgovora
  • 6.141 pregleda
BCB - Filtriranje tablica 06.12.2007. u 14:16 · pre 229 meseci #1
Radi bržeg selektiranja podataka i određenih računanja treba mi filtriranje tablice, ali svaki put različito. Primjerice,

Code:
void __fastcall TForm1::TRijeciFilterRecord(TDataSet *DataSet, bool &Accept)
{
    Accept = Edit1->Text[1] == TRijeci->FieldByName("Rijec")->AsString[1];
}


Ovo mi je ok, ali već sljedeći put uvjet filtriranja se mijenja. Stoga, zanima me kako da primjerice ovo gore prevedem u izraz filter:

Code:
TRijeci->Filter = ???


a da bude ekvivalent ovom gore... Naravno, problematičan je ovaj drugi izraz...

Re: BCB - Filtriranje tablica 06.12.2007. u 17:58 · pre 229 meseci #2
itf, nisam bas najbolje razumeo pitanje.

Filter osobina je (ako se dobro secam) jako primitivna i ne dozvoljava da se prave slozeniji upiti za filtriranje. Uglavnom <, >, LIKE i sl. Nisam siguran da je moguć pristup pojedinačnim karakterima (ne pada mi ništa na pamet). OnFilterRecord pretpostavljam da i postoji da prosiri mogucnosti flitriranja.
Citat:

Ovo mi je ok, ali već sljedeći put uvjet filtriranja se mijenja.

Sta je to konkretno kod OnFilterRecord sto ne odgovara? Na primer, mozes reci:
Code:

void __fastcall TForm1::ADOTable1FilterRecord(TDataSet *DataSet,
      bool &Accept)
{
   Accept = MojUslov();
}
bool TForm1::MojUslov()
{
   // ovde štagod
   return ( ADOTable1->FieldByName("Rijec")->AsString.Length() < Edit1->Text );
}

Sigurno može i pointer na funkciju, ma šta na ona pokazivala.
Re: BCB - Filtriranje tablica 07.12.2007. u 08:54 · pre 229 meseci #3
Radim za faks jedan program baziran na križaljki za testiranje brzine određenih algoritama, no to je sad ovdje nebitno. Ono što meni treba jest da filtriram tablicu za svaki mogući znak (karakter) koji se nalazi u nekoj riječi (i na točno određenoj poziciji). Uglavnom... tih filtriranja ima jako mnogo i sva su varijabilna tj. uvjet nije fiksni. Npr.:

Code:
Za I = 1 do DuljinaRijeci
    Filtriraj tablicu...  // Accept = Edit1->Text[I] == TRijeci->FieldByName("Rijec")->AsString[I];
    // izvrši traženi algoritam nad podacima


Sve u svemu, sad se mislim da je za ovu komplikaciju najbolje možda upotrijebiti ADOQuery pa direktno SQL-om to riješiti...
Re: BCB - Filtriranje tablica 07.12.2007. u 09:45 · pre 229 meseci #4
Citat:

Sve u svemu, sad se mislim da je za ovu komplikaciju najbolje možda upotrijebiti ADOQuery pa direktno SQL-om to riješiti...

Upravo.

Ja podavno ne koristim filtriranje tabela, sem kada se radi o nekom bas jednostavnom sifarniku bez ikakve nade da ce trebati neka ozbiljnija funkcionalnost. Navikao sam se na TADOQuery i ne menjam ga.

Ipak, mislim da kod koji si gore dao za TADOTable jeste dobar i pravi put. Jednostavno, napravis neki kod u OnFilterRecord gde figurisu samo parametri (cak ako treba i pointeri na TEdit i na TDataSet) i imas sve sto ti treba. Mozda bi i filtriranje bilo brze nego sa Querijima, ne znam.


Pozdrav.

Re: BCB - Filtriranje tablica 07.12.2007. u 10:12 · pre 229 meseci #5
Citat:
Mozda bi i filtriranje bilo brze nego sa Querijima, ne znam.
Koliko znam, sve je u pozadini SQL, tako da bi trebalo biti isto. Samo je pitanje što je jednostavnije realizirati (u ovisnosti o situaciji).

Pozdrav
Re: BCB - Filtriranje tablica 07.12.2007. u 14:59 · pre 229 meseci #6
> Koliko znam, sve je u pozadini SQL, tako da bi trebalo biti isto. Samo je pitanje što je jednostavnije realizirati (u ovisnosti o situaciji).

Ako pišeš OnFilterRecord ili koristiš Filter onda se prenose svi podaci iz baze i filtiranje obavlja na klijentu, a ako filtriranje obaviš preko SQL upita onda se filtriranje obavlja na serveru što je uglavnom efikasnije. Da budem iskren ne razumem najbolje šta ti tačno želiš ali nema tog filtriranja koje ne možeš postići u Delphi kodu.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: BCB - Filtriranje tablica 07.12.2007. u 15:35 · pre 229 meseci #7
Citat:
Ako pišeš OnFilterRecord ili koristiš Filter onda se prenose svi podaci iz baze i filtiranje obavlja na klijentu, a ako filtriranje obaviš preko SQL upita onda se filtriranje obavlja na serveru što je uglavnom efikasnije.


Zaista? Baš bi volio pročitati malo više o tome (stavi link) jer nekako baš i sumnjam... Primjerice, ja cijeli dataset imam isključivo u memoriji i tek se na server (bazu) spajam samo u trenutku update-a (post, delete), dok sve operacije (pa i SQL upite) vršim isključivo nad zapisima iz dataset-a u memoriji, a ne sa servera. Niti jedan SQL upit me nije tražio spajanje na server.
Re: BCB - Filtriranje tablica 08.12.2007. u 02:22 · pre 229 meseci #8
> Zaista? Baš bi volio pročitati malo više o tome (stavi link) jer nekako baš i sumnjam... Primjerice, ja cijeli dataset imam isključivo u memoriji i tek
> se na server (bazu) spajam samo u trenutku update-a (post, delete), dok sve operacije (pa i SQL upite) vršim isključivo nad zapisima
> iz dataset-a u memoriji, a ne sa servera. Niti jedan SQL upit me nije tražio spajanje na server.

Onda ne znam koje komponente koristiš, a ni bazu, možda SQLite? Nisam shvatio u koji deo sumnjaš, da je efikasnije izvršiti upit nad bazom? Tako je u opštem slučaju u client/server okruženju. Postoji li neki poseban razlog zašto sve prevlačiš na klijent i tu obrađuješ?
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: BCB - Filtriranje tablica 10.12.2007. u 08:05 · pre 229 meseci #9
Koliko sam ja razumeo -a ti me ispravi ako gresim,ti zelis da iz neke tabele filtriras reci koje sadrze odredjeno slovo?

Znaci imas bazu jos nam reci koja je?

mislim da ti je najbrzi nacin da to dobijes preko SQLQueri-ja

Naprosto ukucas sta zelis-recimo
Code:
 SELECT IME FROM TBLIMENA WHERE IME CONTAINING :NEKOSLOVO


Ovo ti sigurno resava posao ,ako je to bio cilj:-)

I to je poenta price koju ti je sackic rekao -server ce to brze da odradi.
Re: BCB - Filtriranje tablica 10.12.2007. u 08:25 · pre 229 meseci #10
Citat:

Koliko sam ja razumeo -a ti me ispravi ako gresim,ti zelis da iz neke tabele filtriras reci koje sadrze odredjeno slovo?

... na tačno određenoj poziciji.

koliko sam ja razumeo.
Re: BCB - Filtriranje tablica 10.12.2007. u 08:39 · pre 229 meseci #11
I to moze baza da uradi samo jos da znamo koja je.

Na primer u firebirdu bi bilo

substr (TBLIMENA.IME,1,1)

to je na TACNO prvom mestu.
Re: BCB - Filtriranje tablica 10.12.2007. u 08:56 · pre 229 meseci #12
Citat:
Onda ne znam koje komponente koristiš, a ni bazu, možda SQLite? Nisam shvatio u koji deo sumnjaš, da je efikasnije izvršiti upit nad bazom? Tako je u opštem slučaju u client/server okruženju. Postoji li neki poseban razlog zašto sve prevlačiš na klijent i tu obrađuješ?

ADO komponente. Uvijek radim sve na klijentu jer server ne opterećujem konekcijom, a time i ne dovodim se u situaciju da prekoračim broj konekcija tj. da dođem do limita. Ovako je konekcija samo u trenutku zahtjeva i to je vrlo kratko vrijeme. Isto tako, na ovaj način mi je puno lakše analizirati da li je update uspio ili ne.. Riječ je o Access bazi.

Za sve ostale....

Želim napraviti da mi se u tablici prikaži samo riječi koje zadovoljavaju

Prva[N] == Druga[M], za svaki N i M >=0... da se izražim matematički... Ako postoji kakav SQL upit za ovo bio bi zahvalan...
Re: BCB - Filtriranje tablica 10.12.2007. u 09:10 · pre 229 meseci #13
Pojasni jos malo sta zelis da dobijes.
Citat:
Prva[N] == Druga[M], za svaki N i M >=0... da se izražim matematički... Ako postoji kakav SQL upit za ovo bio bi zahvalan...

Ja ovo nisam razumeo :-(
Re: BCB - Filtriranje tablica 10.12.2007. u 09:26 · pre 229 meseci #14
Primjerice, želim filtrirati sve riječi koje na poziciji N imaju znak 'X' i na poziciji M imaju znak 'Y'. Logički AND
Re: BCB - Filtriranje tablica 10.12.2007. u 10:24 · pre 229 meseci #15
Citat:

I to moze baza da uradi samo jos da znamo koja je.

Znam da može sa SQL-om:) Valjda postoje i oni džoker znaci _ koji su kao "čuvari mesta" za bilo koji drugi karakter unutar LIKE i sl.

Zapravo ja sam mislio na onaj slučaj sa osobinom Filter gde je tek ponešto od SQL arsenala dostupno.

Što se tiče onoga sa OnFilterRecord i Accept-a, ja bih išao na ovu varijantu (ako je to i dalje aktuelno):
Code:

bool ukrstenica( char *rec, char *sablon )
{
   bool rezultat = true; // optimisticki

   if ( strlen(rec) != strlen(sablon) )
      return ( false );

   for ( int i=0; i<strlen(rec); i++ )
      if ( sablon[i] != ' ' )
         if ( sablon[i] != rec[i] )
         {
            rezultat = false;
            break;
         }     
   return ( rezultat );
}

int main(int argc, char *argv[])
{
    printf ( "%d\n", ukrstenica( "kalkulator"," a      or" ) );
    printf ( "%d\n", ukrstenica( "kalkulator"," a      o " ) );
    printf ( "%d\n", ukrstenica( "kalkulator","          " ) );
    printf ( "%d\n", ukrstenica( "kalkulator"," a      r " ) );

    system("PAUSE");
    return EXIT_SUCCESS;
}

... odnosno u kontekstu BCB-a:
Code:

// ...
char sablon[MAX];
// ... ovo dinamicki kreirati, po potrebi
strcpy(sablon, " a      o ");
// ...
void __fastcall TForm1::ADOTable1FilterRecord(TDataSet *DataSet,
      bool &Accept)
{
   Accept = ukrstenica( ADOTable1->FieldByName("Rijec")->AsString.c_str(), sablon );
}

(dakle, kod unutar OnFilterRecord je isti, treba samo ispravno formirati sablon)


[Ovu poruku je menjao X Files dana 10.12.2007. u 11:52 GMT+1]
Re: BCB - Filtriranje tablica 10.12.2007. u 11:17 · pre 229 meseci #16
Ne izgleda loše. Još samo nadopisati funkciju koja vraća šablonu u ovisnosti o tome što se traži i to je to. Hvala
Re: BCB - Filtriranje tablica 10.12.2007. u 12:29 · pre 229 meseci #17
> ADO komponente. Uvijek radim sve na klijentu jer server ne opterećujem konekcijom, a time i ne dovodim se u situaciju da prekoračim broj konekcija
> tj. da dođem do limita. Ovako je konekcija samo u trenutku zahtjeva i to je vrlo kratko vrijeme. Isto tako, na ovaj način mi je puno lakše
> analizirati da li je update uspio ili ne.. Riječ je o Access bazi.

Sa Accessom je tako jedino i moguće raditi (osim ako nema još neki sloj), sve se obavlja na klijentima i u onda u fajl baze koji se nalazi na serveru upisuje rezultat, tu nema klasičnog RDBMS client/server rada.

> Primjerice, želim filtrirati sve riječi koje na poziciji N imaju znak 'X' i na poziciji M imaju znak 'Y'. Logički AND

Mislim da i Access SQL podržava džoker karaktere u LIKE izrazu, konkretno to što tebi treba bi pisao kao:
WHERE POLJE LIKE '???X????Y????'; ili bolje '???X????Y*' (ako posle Y nema drugih slova koja se traže). Znači ? zamenjuje jedno bilo koje slovo, a * proizovoljan broj slova.
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: BCB - Filtriranje tablica 10.12.2007. u 13:40 · pre 229 meseci #18
Citat:
Sa Accessom je tako jedino i moguće raditi (osim ako nema još neki sloj), sve se obavlja na klijentima i u onda u fajl baze koji se nalazi na serveru upisuje rezultat, tu nema klasičnog RDBMS client/server rada.


Po defaultu ADO komponente i rade stalnu konekciju s bazom i odmah svaku obradu spremaju direktno u nju. Ovaj način rada na klijentu je samo jedna opcija, a ne jedina mogućnost. Malo miješaš SQL server i Access jer Access je obična datoteka tj. mrežni resurs i jedino na osnovu toga pruža višeklijentsku mrežnu komunikaciju, dok SQL server je već druga priča i može raditi i pomoću TCP protokola i cijevi (pipes). Dakako, puno bolja stvar, no kompliciranija za realizaciju na klijentu i zato ga i ne koristim osim ako baš nije nužno.
Re: BCB - Filtriranje tablica 10.12.2007. u 17:24 · pre 229 meseci #19
> Po defaultu ADO komponente i rade stalnu konekciju s bazom i odmah svaku obradu spremaju direktno u nju. Ovaj način rada na klijentu je samo jedna
> opcija, a ne jedina mogućnost. Malo miješaš SQL server i Access jer Access je obična datoteka tj. mrežni resurs i jedino na osnovu toga
> pruža višeklijentsku mrežnu komunikaciju, dok SQL server je već druga priča i može raditi i pomoću TCP protokola i cijevi (pipes).

Ti si nešto izmešao ;) Govorim o Accessu, zato sam i napisao "sa Accessom je tako jedino i moguće..."
Potpis
Do not be a help vampire (http://slash7.com/pages/vampires), use the google.

How to ask questions the smart way:
http://www.catb.org/~esr/faqs/smart-questions.html
http://solair.eunet.rs/~fangor...stions/smart-questions.sr.html
Re: BCB - Filtriranje tablica 11.12.2007. u 08:39 · pre 229 meseci #20
Citat:
Ti si nešto izmešao ;) Govorim o Accessu, zato sam i napisao "sa Accessom je tako jedino i moguće..."
To uopće nije istina.

Malo potraži na googlu o modelima komunikacije između baza i klijenata pa pročitaj. Pozdrav
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme