sql dilinde şarta bağlı sorgulama yapma

MS SQL Server veritabanı ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
bekirmuratersoy
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 07:46
Konum: istanbul

sql dilinde şarta bağlı sorgulama yapma

Mesaj gönderen bekirmuratersoy »

esselamü aleyküm
arkadaşlar bi sorgum var daha açıkçası bi sonucu göstermek için 4 adet veri tabanından bilgi çekiyorum ancak bu bilgilerin hepsi zorunlu alanlar
değil kullanıcı zorunlu alanlardan birini girmediği zaman query açıldığında yapılan kaydı göremiyorum
bunun için şarta bağlı sorgulama yapmam lazım geldiğini düşünüyorum yani zorunlu alan lardan biri girilmediği zaman değer 0 veya null olduğu zaman o tablo ile ana tablo arasında koyduğum şartı geçerek bana sorgu oluşturmasını istiyorum yani değer 0 ise o şartı geçsin değilse şartı uygulasın gibi yardımcı olursanız sevinirim. şimdiden hepinizden allahrazı olsun
bu arada bu yaptığım sorguyu gridin ilk açılışında kullanıyorum
Zulmü alkışlayamam, zalimi asla sevemem;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bu tür işler programlama tarafında yapılırsa daha pratik olur.

Kod: Tümünü seç

function SartVer(const AlanAdi,Deger:String;const Op:String='='):String;
begin
  if (Alan<>'') and (Deger<>'') then Result:=Format('(%s%s%s)',[Alan,Op,Deger])
  else Result:='';
end;

function SartBirlestir(const Sart1,Sart2:String;const Op:String='and'):String;
begin
  if Sart1='' then Result:=Sart2
  else if Sart2='' then Result:=Sart1
  else Result:=Format('(%s %s %s)',[Sart1,Op,Sart2]);
end;

.
.
.
var Sart:String;
begin
  Sart:=SartVer('Kod',Trim(Edit1.Text));
  Sart:=SartBirlestir(Sart,SartVer('Ad',Trim(Edit2.Text)));
  Sart:=SartBirlestir(Sart,SartVer('No',Trim(Edit3.Text)));
  Sart:=SartBirlestir(Sart,SartVer('Tur',Trim(Edit4.Text)));
//vs. vs.
  ADOQuery1.Close;
  ADOQuery1.SQL.Text:='select * from [Kayit]';
  if Sart<>'' then ADOQuery1.SQL.Add(Format('where %s',[Sart]));
  ADOQuery1.Open;
end;
Burada hazırlanan SartVer ve SartBirlestir fonksiyonları kullanıcının boş geçtiği editler için şartları es geçer. Eğer verilmiş kayıtlar için Null değere sahip satırlarda sorun yaşıyorsan o zaman şartı aşağıdaki isNull kullanarak oluşturursan sorun kalmaz.

Kod: Tümünü seç

Sart:=SartVer('isNull(Kod,'''')',Trim(Edit1.Text));
Sart:=SartBirlestir(Sart,SartVer('isNull(Ad,'''')',Trim(Edit2.Text)));
Sart:=SartBirlestir(Sart,SartVer('isNull(No,0)',Trim(Edit3.Text)));
Sart:=SartBirlestir(Sart,SartVer('isNull(Tur,0)',Trim(Edit4.Text)));
//vs. vs
İyi çalışmalar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
bekirmuratersoy
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 07:46
Konum: istanbul

ş

Mesaj gönderen bekirmuratersoy »

şaban ustam teşekkür ederim şu anda okudum kodu
biraz karışık geldi ama eminim anlamışsınızdır
ve sorunu bu şekilde çözümleyeceğimi düşünüyorum
Zulmü alkışlayamam, zalimi asla sevemem;
bekirmuratersoy
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 07:46
Konum: istanbul

Mesaj gönderen bekirmuratersoy »

SELECT dbo.bme_hesaplar.hesap_id AS EXPR3, dbo.bme_hesaplar.hesap_kodu AS EXPR4, dbo.bme_hesaplar.hesap_unvan AS EXPR5,
dbo.bme_hesaplar.vergi_dairesi AS EXPR6, dbo.bme_hesaplar.vergi_no AS EXPR7, dbo.bme_hesaplar.alicimi AS EXPR8,
dbo.bme_hesaplar.aktifmi AS EXPR9, dbo.bme_fason_islemler.fason_islem_id AS EXPR10, dbo.bme_fason_islemler.fason_islem_kodu AS EXPR11,
dbo.bme_fason_islemler.fason_islem_unvan AS EXPR12, dbo.bme_fason_islemler.fason_islem_aciklama AS EXPR13,
dbo.bme_fason_islemler.fason_islem_default_fiyat AS EXPR14, dbo.bme_fason_giris.giris_saat AS EXPR15,
dbo.bme_fason_giris.faturalandimi AS EXPR16, dbo.bme_fason_giris.giris_not AS EXPR17, dbo.bme_fason_giris.miktar AS EXPR18,
dbo.bme_fason_giris.urun_aciklama AS EXPR19, dbo.bme_fason_giris.fason_islem_id AS EXPR1, dbo.bme_fason_giris.adres_id AS EXPR20,
dbo.bme_fason_giris.hesap_kodu AS EXPR2, dbo.bme_fason_giris.giris_tarih AS EXPR21, dbo.bme_fason_giris.fis_no AS EXPR22,
dbo.bme_fason_giris.giris_id AS EXPR23, dbo.bme_fason_giris.*, dbo.bme_adresler.il_id AS EXPR24, dbo.bme_adresler.hesap_kodu AS EXPR25,
dbo.bme_adresler.adres AS EXPR26, dbo.bme_adresler.adres_yetkili AS EXPR27, dbo.bme_adresler.adres_etiket_id AS EXPR28,
dbo.bme_adresler.adres_id AS EXPR29, dbo.bme_adresler.*, dbo.private_adres_etiket.adres_etiket AS EXPR30,
dbo.private_adres_etiket.adres_etiket_id AS EXPR31, dbo.private_adres_etiket.*
FROM dbo.bme_adresler INNER JOIN
dbo.private_adres_etiket ON dbo.bme_adresler.adres_etiket_id = dbo.private_adres_etiket.adres_etiket_id INNER JOIN
dbo.bme_hesaplar ON dbo.bme_adresler.hesap_kodu = dbo.bme_hesaplar.hesap_kodu INNER JOIN
dbo.bme_fason_giris ON dbo.bme_adresler.adres_id = dbo.bme_fason_giris.adres_id INNER JOIN
dbo.bme_fason_islemler ON dbo.bme_fason_giris.fason_islem_id = dbo.bme_fason_islemler.fason_islem_id
WHERE (dbo.bme_hesaplar.hesap_kodu = '34A5')

şaban ustam bakın ben bu sorgudan
aşağıdaki bilgileri çekiyorum




hesap_kodu
hesap_unvan
fiş no
tarih
saat
adres_etiket
adres_yetkili
fason islem kodu
fason işlem adi
ürün açıklama
miktar
giriş not
faturalandimi 1 / 0 evet / hayır


kayıtlar arka planda id ler üzerinden dönüyor(giriş id si üzerinden takip ediyorum ama kayıt bu fieldlarla anlaçılır oluyor)
ben burada adocommand ile
kaydı şöyle yapıyorum

insert into bme_fason_giris (fis_no, giris_tarih, giris_saat, hesap_kodu, adres_id, fason_islem_id, urun_aciklama, miktar, giris_not)
values(:@fis_no,:@giris_tarih,:@giris_saat, :@hesap_kodu,:@adres_id,:@fason_islem_id,:@urun_aciklama,:@miktar,:@giris_not)

bu değişkenlere ve ri aktararak kayıt yapıyorum
buarad kullanıcı adres bilgisi yapmayınca kayıtı bu sorgu ile görüntüleyemiyorum

sizin function biraz karışık geldi bana doğrusu

yardımlarınız için teşekkür ederim
Zulmü alkışlayamam, zalimi asla sevemem;
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Tek bir sorgu ile ortalığı karıştırmak yerine bir kaç sorgu ile sql değişkenlerine değer atasan daha sağlıklı ve kolay olmaz mı? Sanırım bu yöntemi değiştirmek zorundasın. Çünkü şartların join şartı where değil. Benim aklıma yatan, farklı bir kaç sorgu ile değişkenleri çekmendir.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
bekirmuratersoy
Üye
Mesajlar: 21
Kayıt: 02 Oca 2008 07:46
Konum: istanbul

Mesaj gönderen bekirmuratersoy »

sanırım dediğinizi anladım
yani dolu ise şu sorguyu etkinleştir
boş ise şu sorguyu etkinleştir gibi diyorsunuz değilmi
Zulmü alkışlayamam, zalimi asla sevemem;
Cevapla