Arkadaşlar
Merhaba
Veritabanım SQL server 2000.
15 tane seçeneği olan filtreleme seçeneği düşünün.
Olay sonunda DBGrid içerisinde query ile alanlar yerleştirilecek.
Peki 15 tane filtreleme seçeneğini WHERE ifadesinin sonuna nasıl yerleştireceğiz?
Kullanıcı içerisinde 3 tane alanı check eder ve bu 3 tane alanın filtrelemesini WHERE ifadesiyle nasıl kontrol edeceğiz?
Bu olayın mantığı nedir?
Query kullanımdaki WHERE ifadesi
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
WHERE ifadesine bu koşuları uygulamayı anlayabiliyorum. Benim anlayamadığım nokta şu :
15 tane filtreleme yapılacak alan Edit nesnesi olsun.
İçinde bilgi gördüklerini WHERE kapsamına alacak.
İçinde bilgi yoksa WHERE içinde görükmeyecek ya da gözükmemesi lazım.
İçinde bilgi yokken WHERE kapsamına alırsak bu alan NULL veya '' gibi bir ifadeyle alınacağını düşünüyorum. Bu da doğru sonuca ulaştırmaz.
Yani WHERE içinde 15 tane alanı AND ile birbirine bağlamayı anlayamıyorum. Sonucu sanki yanlış gelecek gibi görünüyor.
15 tane filtreleme yapılacak alan Edit nesnesi olsun.
İçinde bilgi gördüklerini WHERE kapsamına alacak.
İçinde bilgi yoksa WHERE içinde görükmeyecek ya da gözükmemesi lazım.
İçinde bilgi yokken WHERE kapsamına alırsak bu alan NULL veya '' gibi bir ifadeyle alınacağını düşünüyorum. Bu da doğru sonuca ulaştırmaz.
Yani WHERE içinde 15 tane alanı AND ile birbirine bağlamayı anlayamıyorum. Sonucu sanki yanlış gelecek gibi görünüyor.
s.a.
iki ihtimal var
1.Query dinamiktir. Where ifadesinin altındakilero o an kullanıcının seçtiği alanalra göre oluşturursunuz.
2.Where ifadesinin altındakiler sabit olur. ancak parametrelerde koşulları belirlerken + bir kontrol daha yapmanız gerekir.
Şöyle biraz açıyım.
tarzında koşullarınızı belireyerek yapabilirsiniz.
burda eğer o alan ile filitrelemek istemiyorsanız o alan için uygun bi değer belirleyip onu kontrol edeceksiniz.
kolay gelsin.
iki ihtimal var
1.Query dinamiktir. Where ifadesinin altındakilero o an kullanıcının seçtiği alanalra göre oluşturursunuz.
2.Where ifadesinin altındakiler sabit olur. ancak parametrelerde koşulları belirlerken + bir kontrol daha yapmanız gerekir.
Şöyle biraz açıyım.
Kod: Tümünü seç
where
((adi like :PARAM1||%) or (:PARAM1='')) and
((yasi>:PARAM2 ) or (:PARAM2=-1)) and
((xxxx=:PARAM3) or (:PARAM3 is null)) and
.....
burda eğer o alan ile filitrelemek istemiyorsanız o alan için uygun bi değer belirleyip onu kontrol edeceksiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
o zaman sorgu stringini başlangıçta oluşturursunvipaydin yazdı:WHERE ifadesine bu koşuları uygulamayı anlayabiliyorum. Benim anlayamadığım nokta şu :
15 tane filtreleme yapılacak alan Edit nesnesi olsun.
İçinde bilgi gördüklerini WHERE kapsamına alacak.
İçinde bilgi yoksa WHERE içinde görükmeyecek ya da gözükmemesi lazım.
İçinde bilgi yokken WHERE kapsamına alırsak bu alan NULL veya '' gibi bir ifadeyle alınacağını düşünüyorum. Bu da doğru sonuca ulaştırmaz.
Yani WHERE içinde 15 tane alanı AND ile birbirine bağlamayı anlayamıyorum. Sonucu sanki yanlış gelecek gibi görünüyor.
ve paramtre sayısını ona göre belirlersin.
şuna bezer bi algoritma olabilir.
Kod: Tümünü seç
VAR
S : STRING;
I,K : INTEGER;
LIST:TSTRINGS;
BEGIN
S := 'SELECT * FROM TABLO WHERE'
I:=0;
K:=0;
LIST:=TSTRINGLIST.CREATE;
LIST.CLEAR;
IF LENGTH (EDIT(N).TEXT) >0 THEN BEGIN // LİSTBOX OLSAYDI DAHA İYİ OLURDI :)
IF I>0 THEN S:=S+ ' AND'; // EĞER I 0 DAN BÜYÜKSE ŞARTIN BAŞINA "AND" EKLE
S:=S+ 'ŞART=:'+PARAM+INTTOSTR(I); //PARAMTRE İSMİ İÇİN
LIST.ADD(EDIT(N).TEXT; // PARAMETREYİ ALMAK İÇİN STRINGLISTE ATIYOR
I:=I+1;
END;
QUERY.SQL.CLEAR;
QUERY.SQL.ADD(S);
FOR K:=0 TO I DO
QUERY.PARAMS[I].ASVARIANT:=LIST.STRINGS[K]; //STRINLISTTEN PARAMETRELERİ ALIYOR
QUERY.OPEN
SADECE MANTIĞINI ANLATMAK İÇİNDİR
UMARIM İŞİNE YARAR.
BU ARADA SORGULARI EDIT YERINE LISBOX GİBİ BİR NESNEDEN ALIRSAN DİNAMİK UYGULAMA AÇISINDAN DAHA İYİ OLUR.