Query kullanımdaki WHERE ifadesi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Query kullanımdaki WHERE ifadesi

Mesaj gönderen vipaydin »

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?
Demitri

Mesaj gönderen Demitri »

Kod: Tümünü seç

WHERE ŞART1 AND ŞART2 AND ........ AND  ŞART(N)
KOLAY GELSİN
Kullanıcı avatarı
vipaydin
Üye
Mesajlar: 82
Kayıt: 23 Ara 2004 04:52

Mesaj gönderen vipaydin »

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.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

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.

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
.....
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.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Demitri

Mesaj gönderen Demitri »

vipaydin 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.
o zaman sorgu stringini başlangıçta oluşturursun
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
YUKARIDAKI KOD BİREBİR UYGULAMA DEİLDİR
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.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Aradığın burada olabilir. ;)

viewtopic.php?t=8668
Cevapla