[ lakinen @ 23.08.2001. 00:03 ] @
e kako da sortiram neku bazu(vec unetu u delphi) po nekoj koloni(npr. prezime).?? i kako kad ubacim novi record da ga on ubaci gde treba da bi bilo sortirano. |
[ lakinen @ 23.08.2001. 00:03 ] @
[ misk0 @ 23.08.2001. 16:38 ] @
Citat: lakinen je napisao: e kako da sortiram neku bazu(vec unetu u delphi) po nekoj koloni(npr. prezime).?? i kako kad ubacim novi record da ga on ubaci gde treba da bi bilo sortirano. pa zavisi, ako imas dbf ili paradox napravi indexe i radi refresh poslije upisa novog recorda. A ako imas neku SQL comp. bazu .onda koristi ORDER by klauzulu SELECT komade [ lakinen @ 24.08.2001. 00:04 ] @
kakve index tj. kako mozesh li malo preciznije.
[ Gojko Vujovic @ 24.08.2001. 01:30 ] @
Hajde budi ti precizniji i reci koju vrstu baze si koristio, makar se opredeli između SQL - nonSQL, kako bi smo ti mogli pomoći.
[ lakinen @ 24.08.2001. 13:30 ] @
SQL baza. Pravio sam je u databaseDesktop-u ime.db. Znaci iam pet kolona i ja treba da ej sortiram po prezimenu.
[ Gojko Vujovic @ 24.08.2001. 16:45 ] @
Ovako, pokušaj na sve SELECT upite gde ti treba sortiranje da dodaš ORDER BY column na kraj upita. Pa javi kako ti izgleda.
[ Pajke @ 03.05.2002. 17:17 ] @
Evo i ja imam slican problem sa sortiranjem.
koristim paradox i dBase tabele,koje pomocu TQuery prikazujem u mrezi i sve to lepo radi ako ne koristim ORDER BY :Mogu da editujem i dodajem nove zapise a sve se automatski upisuje u tabelu. Ako upotrebim Order by komandu da bi prikazani podatci bili sortirani onda je nemoguce editovati zapise i unet nove zapise . Zanima me da li je moguce sortirati tabelu odmah prilikom upisa ili editovanja tako da sama tabela bude sortirana jer ORDER BY sortira samo prilikom prikazivanja ako razumete sta hocu reci... [ tiodor @ 03.05.2002. 19:52 ] @
Pazi, pod broj jedan, samim tim što je ekstenzija fajla *.db, to NIJE SQL baza, već Paradox tabela. Paradox i dBase tabele odnosno podsistemi za rad sa njima ne podržavaju puni SQL set komandi. ORDER BY klauzula se ne može koristiti za Live (ad hoc) upite, te je stoga najbolje rešenje kreirati indekse po poljima po kojima se želi sortiranje, a onda pri prikazivanju (pretpostavljam u DBGrid-u), menjati indekse, nešto tipa:
var OldIndexName: string; OldIndexName:=tbTabela.IndexName; // snimi stari indeks, da bi kasnije vratio tbTabela.IndexName:=ZeljeniIndeks; // postavi novi E, sad pošto odavno nisam radio sa BDE bazama, nisam siguran da li je potrebno prvo setovati Index na nil, pa onda upisati ime, ili može da se odradi u letu, u svakom slučaju može se odraditi u okviru try except finally bloka. Pozdrav, Tiodor. [ Pajke @ 04.05.2002. 00:28 ] @
Citat: tiodor: Pazi, pod broj jedan, samim tim što je ekstenzija fajla *.db, to NIJE SQL baza, već Paradox tabela. Paradox i dBase tabele odnosno podsistemi za rad sa njima ne podržavaju puni SQL set komandi. ORDER BY klauzula se ne može koristiti za Live (ad hoc) upite, te je stoga najbolje rešenje kreirati indekse po poljima po kojima se želi sortiranje, a onda pri prikazivanju (pretpostavljam u DBGrid-u), menjati indekse . Probao sam Ovo sa Indexima i radi dobro ako Koristim Komponentu TTable mada sam ja mislio da upotrebim TQueru zbog pretrazivanja podataka (kao npr. select* from MOJABAZA Where IME='Pera' ili slicno) ali TQueru neradi sa indexima U TTable komponenti ima Filter , Samo ne znam kako se koristi ,Sta god sam probao da unesem u njega prijavi mi gresku [ tiodor @ 04.05.2002. 03:17 ] @
Prvo, moram da se ispravim, live upiti ne rade ukoliko se koristi SELECT, a što se tiče filtera, nikada nisam uspeo da ih nateram da rade kako treba. Umesto toga sam koristi Range metode, odnosno SetRangeStart, SetRangeEnd, ApplyRange i CancelRange.
Mada, kada malo bolje razmislim, ukoliko je baza na kojoj radiš lokalna (single user), zašto ne koristiš ADO i Access bazu, u praksi se ova kombinacija pokazala prilično kvalitetno, a ukoliko radiš multiuser, moja preporuka je Firebird (Interbase), mislim da je adresa http://firebird.sourceforge.net, u nekih 2-3MB imaš pravu relacionu bazu podataka. Pozdrav, Tiodor. [ overflow @ 04.05.2002. 09:51 ] @
Citat: Pajke: Probao sam Ovo sa Indexima i radi dobro ako Koristim Komponentu TTable mada sam ja mislio da upotrebim TQueru zbog pretrazivanja podataka (kao npr. select* from MOJABAZA Where IME='Pera' ili slicno) ali TQueru neradi sa indexima U TTable komponenti ima Filter , Samo ne znam kako se koristi ,Sta god sam probao da unesem u njega prijavi mi gresku Za pretrazivanje mozes koristiti funkciju: TDataSet.Locate odnosno TTable.Locate, TQuery.Locate itd. sa odgovarajucim parametrima. Funkcija vraca true ako je slog pronadjen, a takodje mozes koristiti i TDataSet.LocateNext za pronalazenje sledeceg sloga u tabeli koji zadovoljava zadate kriterijume. [ Pajke @ 04.05.2002. 23:51 ] @
.[/quote]
Za pretrazivanje mozes koristiti funkciju: TDataSet.Locate odnosno TTable.Locate, TQuery.Locate itd. sa odgovarajucim parametrima. Funkcija vraca true ako je slog pronadjen, a takodje mozes koristiti i TDataSet.LocateNext za pronalazenje sledeceg sloga u tabeli koji zadovoljava zadate kriterijume.[/quote] PA sad ... Funkciu TTable.Locate nesto nemogu da shvatim gledao sam u helpu ali kako god je postavim nece da prihvati... Nasao sam u Helpu jos neke Verovatno slicne funkcie(FeildFind,Lockup) ali ni njih neumem da upotrebim Moze nesto sa filterom npr. Table1.Filter Ime='Paja' i to radi ali bih ja hteo da stavim recimo Ime='Pa' i da dobijem sve koji pocinju na ta slova , dali to moze? Pajke. [ tiodor @ 05.05.2002. 03:11 ] @
Koliko je meni poznato filtriranje ne može da se radi parcijalno (nešto kao LIKE u SQL-u), te ti to može predstavljati problem.
Mislim da bi najbolje bilo (ukoliko nijwe neki važan program), da mi baciš sors ili deo sorsa na mail, kao i šta želiš da bude urađeno, pa da vidimo šta se može. Pozdrav, Tiodor [ tiodor @ 06.05.2002. 00:34 ] @
Pajke, bacio sam pogled na neki kod od pre jedno 4-5 godina i našao rešenje, ali da ne bi pisao čaršaf, šaljem ti na private.
Ukoliko postoji interesovanje i kod ostalih, baciću primer i na forum. Pozdrav, Tiodor. [ shaDy @ 05.06.2002. 03:24 ] @
mogo bi da prikacis uz poruku ako nije problem.
Pozdrav [ Riste Pejov @ 05.06.2002. 19:11 ] @
Filtriranje baze uz pomoc TDataset.Filter, ili pretraga uz pomoc TDataset.Locate, nije pametno koristiti kad su u pitanju velike tabele, zato sto pre nego sto se bilo koja od te dve funkcije pozove dataset mora da uradi FetchAll.
E sad, kad je to tabela sa 50K slogova, onda se vise isplati da uradis jedan query koji vraca dataset sa trazenih slogova nego da to radis uz Locate, Ali ako se filter i locate ponavljaju puno, onda je dobro da ucitas celu tabelu na start aplikacije, uz pozivanje FetchAll, pa da taj dataset pretrazivas sa locate ili filtriras. [ Brkic @ 25.02.2007. 20:13 ] @
Gde da nadjem taj ' TDataSet.LocateNext ' , sve sam zivo pretrazio i nigde nema TDataSet ???
Ima TDataSource i TClienDataSet ali oni nemaju opciju ' LocateNext ' Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|