ORkomutunda problem

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

ORkomutunda problem

Mesaj gönderen cuneyt22 »

s.a
arkadaslar kusura bakmayin bu soru ile vaktinizi alacam ama cok basit bir soru soracam..

select * from deneme where no=6 and ((sonuc_1 is not null) OR (sonuc_2 is not Null))

bu komutu calistirdigimda bana sonuc_1 ve sonuc_2 alani bos olan degerlerle beraber sonuc_1 ve sonuc_2 alani dolu olan verileri listeliyor oysa ben sonuc_1 veya sonuc_2 alanindan biri dolu oldugunda veriyi listelemsini istiyorum oysa o yapmiyor bu isi ben nerede hata yapiyor olabilririm interbase kullaniyorum bu arada....
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

yani syntax doğru gibi görünüyor :roll:
bende merak ettim sorun nerede acaba ?
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

inanin cok zor durumdayim yani bu kodun calismamasi sistemin islememesi anlamina geliyor ve suan acayip sIkIntIdayim ..yardimlarinizi bekliyorum
Berdem
Üye
Mesajlar: 431
Kayıt: 28 Tem 2003 12:28

Mesaj gönderen Berdem »

Arkadaşım basit table ve sonuç ile beraber tarif edersen belki daha rahat yardımcı olabiliriz.Naile hanımın yaptıgı gibi
viewtopic.php?t=4942
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

ya hocam bu o kadarda karmasik bir soru degil 1 tablom var deneme tablosu diye ve bu tablo icinde 3 adet sonuc alani var ben 2.sini kullaniyorum sonucu inteer olanlar sonuc_1'de sonucu yazi olanlar sonuc_2 de tutuyorum... ve bir kisinin birden fazla sonucu olabiliyor yani 1.sonucu integer 2.sonucu yazi 3.sonucu ise sonucu cikmamis olabilir.. benim yapmak istediim ise bu alanlar arasinda kisinin numarasina baksin numarasi 6 diyelim bu kisinin bir cok sonucu olabilir ancak bu sonuclar ya sonuc_! yada sonuc_2 alanina yazilmistir...ben ise bu alanlardan dolu olanlari listelemek istiyorum

select * from deneme where no=6 and ((sonuc_1 is not null) OR (sonuc_2 is not Null)) ve soruyu calistirdiimda sonuc veriyor ancak sonuc_1 ve sonuc_2 alani bos olan sonuclarida etiriyor ben ise bunlardan biri bos olduunda getirmesini istemiyorum
Kullanıcı avatarı
mikser
Üye
Mesajlar: 120
Kayıt: 30 Haz 2003 09:54
Konum: Ankara

Mesaj gönderen mikser »

select * from deneme where no=6 and (sonuc_1 is not null OR sonuc_2 is not Null)

bir de bunu deneyin.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
sonuc_2 alanı string ise
şöyle değiştrip deniyebilirmisiniz.

Kod: Tümünü seç

 or sonuc_2<>''
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
highmemo

Mesaj gönderen highmemo »

Cüneyt bey, SQL cümleniz doğru , ama hata şundan kaynaklanıyor muhtemelen..

Verileri yazarken değer atıyorsunuz yani, field değerleri null / unassigned / value olabilir

null ve unassigned birbirinden farklı..
Örneğin IBConsole'den verilerinize bakın ilgili alanda <null> yazıyorsa
o alan null ve sorgudan dönmesi gerekiyor, eğer <null> yazmıyorsa o alan null değil değer atanmamış bir alandır.. bu yüzden kullanılmayan alana null olarak eşitleyin.

Qry.FieldByname('Fld2').asVariant := Null; veya insert into tbl_x (a,f1,f2) values (1,1,null) ve güncellerken de set fld2=null

kolay gelsin..
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

denedim hocam ama olmadi sonuc alanlari bos olanlarida getirdi..bu iki alani bos olanlar ve iki alandan herhani biri dolu olanlar geliyor oysa bu alandan herhani biri bos oldugunda onun elmesini istemiyorum
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 563
Kayıt: 11 Haz 2003 06:49
Konum: Adana
İletişim:

Mesaj gönderen m_ekici »

değişken içeriğinin null olduğuna eminmisin.
doganzorlu
Kıdemli Üye
Mesajlar: 395
Kayıt: 22 Tem 2004 09:15
Konum: İzmir
İletişim:

Mesaj gönderen doganzorlu »

Selam,

ilk mesaj: "oysa ben sonuc_1 veya sonuc_2 alanindan biri dolu oldugunda veriyi listelemsini istiyorum "
son mesaj: "oysa bu alandan herhani biri bos oldugunda onun gelmesini istemiyorum"

istediğiniz şey zamanla değişmiş. Ben ilk isteğinize göre bir query yazıyorum;
cuneyt22 yazdı: SELECT * FROM deneme
WHERE no=6 AND
((sonuc_1 is null) AND (sonuc_2 is not Null)) OR
((sonuc_1 is not null) AND (sonuc_2 is Null))
)
şeklinde deneyerek çözüme ulaşabilirsiniz. Sizin query de durumu değerlendirelim;

sonuc_1 = null, sonuc_2=null --> listelenmez
sonuc_1 = null,sonuc_2!=null -->listelenir
sonuc_1 != null,sonuc_2=null -->listelenir
sonuc_1 != null,sonuc_2!=null -->listelenir

yukarıdaki query de ise;

sonuc_1 = null, sonuc_2=null --> listelenmez
sonuc_1 = null,sonuc_2!=null -->listelenir
sonuc_1 != null,sonuc_2=null -->listelenir
sonuc_1 != null,sonuc_2!=null -->listelenmez

sanırım bu işinizi görür.

Kolay gelsin,
Doğan Zorlu, İzmir

------------------------
"Bu Kitap'ı sana yalnız şunun için indirdik: Hakkında ayrılığa düştükleri şeyi onlara iyice açıklayasın ve Kitap, iman eden bir topluluk için kılavuz ve rahmet olsun." (NAHL 64)
Kullanıcı avatarı
cuneyt22
Üye
Mesajlar: 213
Kayıt: 07 Şub 2004 03:32
İletişim:

Mesaj gönderen cuneyt22 »

arkadaslar hepinizden allah razi olsun bu sorunu hallettim sorun string alandan kaynaklaniyor string alani not null diyince isleme almiyor ancak aslangeri arkadasin tavsiyesi ile sonuc_2<>' ' ifadesini koyunca algiladi ve sorunum haloldu...bir kismi :)

arkadaslar simdiki sorunum ise bu sonuclari qreport ile yazdiriyorum ancak benden istedikleri alanlar arasina bosluk eklemek ornek vereyim en iyisi...simdi no alanindan 6 adet var ve bu 6 adet nonun bir suru alt parametresi var... ben no alana gore order by ile listeliyordum bir sorun yok ancak benden istedikleri no alani 1 diyelim bunu en ustte ardindan 2 gelirse bu no=1 ile arasina bir bosluk birakacak ardindan no=2 nin sonuclarini yazacak yani group by ile lesteledigim sonuclar arasina bosluk birakmak istiyorum bunun cozumu varmi acaba ben yok dedim ama istiyorlar iste...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

S.A.
quick reportta group band var onları kullanarak yapabilirsin.
bir tane qrgroup koyuyorsun. birtane de qrband koyup band type ını groupfooter yapıyorsun. groupheader bandın bandın footerband ına son eklediğin bandı seçiyorsun. gene groupheader bandının expresion özelliğine gruplamak istediğin alanı seçiyorsun.
Kaba olarak bu şekilde yapılıyor. Quickrep in demolarında da bununla ilgili örnekler vardı.
Kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

ha bu arada gruop heade bandının heightini 0(Sıfır) yaparsın groupfooter da istediğin genişligi verirsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla