1

Konu: Filter

Elimde bir dosya var ve içindeki kayıtları filtrelemek istiyorum,
ancak kullanıcı çok fazla alan üzerinden filtre yaptığı için set filter to
ile biraz zorlanıyorum açıkcası, bunun daha kolay bir yolu varmı acaba, veya bunun için hazır bir tool bulabilirmiyim.

2

Re: Filter

FilterStr = ""
Cond1 = ""
Cond2 = 0
Cond3 = DToC("  /  /  ")
*/ Cond1...CondN ; bellek değişkenleri
*/ Alan1...AlanN tablo alan isimleri olmak üzere ;
*...
Do UserFilter

Procedure UserFilter
Select TestData
FilterStr = "Alan1 = Cond1 AND "
FilterStr = FilterStr + "Alan2 = Cond2"
FilterStr = FilterStr + " AND Alan3 = Cond3"
FilterStr = FilterStr + " OR (Alan4 = Cond4 AND Alan5 = Cond5)"
Set Filter To &FilterStr
*/ Böyle bir kodun çalışması lazım. Ama bunu soruna cevap olsun diye yazdım. Tabi ki yüklü tablolarda set filter to yavaş çalışabilir.

3

Re: Filter

foxpro dökümanlarında
"Using Rushmore Query Optimization with Tables" bölümü bu konuda ip ucu veriyor.
doğru indexler seçmek aramaları hızlandırıyor.
Bir çok alanda filtre işlemi uygulanmış bile olsa bu koşulalrdan birinin bile indexli olması işlemi hızlandırıyor..
Ben denedim işe yaradı..
örneğin table.sehir, table.mahalle alanlarına sahip bir dosyada table.sehir e göre index yapmak ve Rushmore teknolojisini devrede bırakmak işe epey yarıyor..
eğer her bilgiye göre index olursa daha hızlı filtre ediyor..

umarım işine yarar..

4

Re: Filter

SQL Select ile yapsan bu işlemi daha rahat sonuc alirsin

lcwhere01=...
lcwhere02=...
lcwhere03=...
lcwhere04=...

lcWhere = lcwhere01 + [ and ] + lcwhere02 + [ and ] + lcwhere03 + [ and ] + lcwhere04

Select * from youtable where &lcwhere into cursor CrsQuery nofillter

basit olarak fikir vermesi acisindan ornekledim

5

Re: Filter

Teşekkürler,
Bunlar zaten select ile ilgili elde ettiğim cursorlar üzerinde kullanıcının ayrıca bir filtreleme yapmasını sağlamak içindi.

6

Re: Filter

lcwhere01 lcwhere02 ayri cursorlere ait alanlardan da olusabilir,
SQL joinle birlestirip yine istenilen kayitlari gosterme sansin olur