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

BCB - Filtriranje tablica

[es] :: C/C++ programiranje :: BCB - Filtriranje tablica

Strane: 1 2

[ Pregleda: 4080 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon BCB - Filtriranje tablica06.12.2007. u 14:16 - pre 199 meseci
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...

 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Filtriranje tablica06.12.2007. u 17:58 - pre 199 meseci
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.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica07.12.2007. u 08:54 - pre 199 meseci
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...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Filtriranje tablica07.12.2007. u 09:45 - pre 199 meseci
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.

 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica07.12.2007. u 10:12 - pre 199 meseci
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
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: BCB - Filtriranje tablica07.12.2007. u 14:59 - pre 199 meseci
> 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.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica07.12.2007. u 15:35 - pre 199 meseci
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.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: BCB - Filtriranje tablica08.12.2007. u 02:22 - pre 199 meseci
> 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š?
 
Odgovor na temu

darko_sudarov
ProConto Software doo
Kikinda

Član broj: 89262
Poruke: 136
212.200.34.*



Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 08:05 - pre 199 meseci
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.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 08:25 - pre 199 meseci
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.
 
Odgovor na temu

darko_sudarov
ProConto Software doo
Kikinda

Član broj: 89262
Poruke: 136
212.200.34.*



Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 08:39 - pre 199 meseci
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.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 08:56 - pre 199 meseci
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...
 
Odgovor na temu

darko_sudarov
ProConto Software doo
Kikinda

Član broj: 89262
Poruke: 136
212.200.34.*



Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 09:10 - pre 199 meseci
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 :-(
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 09:26 - pre 199 meseci
Primjerice, želim filtrirati sve riječi koje na poziciji N imaju znak 'X' i na poziciji M imaju znak 'Y'. Logički AND
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.tekostolac.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 10:24 - pre 199 meseci
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]
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 11:17 - pre 199 meseci
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
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 12:29 - pre 199 meseci
> 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.
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 13:40 - pre 199 meseci
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.
 
Odgovor na temu

savkic
Igor Savkić

Član broj: 92186
Poruke: 2739



+92 Profil

icon Re: BCB - Filtriranje tablica10.12.2007. u 17:24 - pre 199 meseci
> 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..."
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: BCB - Filtriranje tablica11.12.2007. u 08:39 - pre 199 meseci
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
 
Odgovor na temu

[es] :: C/C++ programiranje :: BCB - Filtriranje tablica

Strane: 1 2

[ Pregleda: 4080 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

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