S.A. Arkadaşlar,
Bİr SP yazdım listeleme için ama her şart için yeni bir SP yazmak bana biraz zor geliyor ve doğru değildir sanırım.
Örneğin; Aşağıdaki SP, BOL_KOD ve 2 Tarih arasındakileri listeliyor ben bunu söyle yapmak istiyorum aslında:
Bir şartla eğer sadece bolge koduna göre alacaksam bol_kod u kriter alsın, (
select bol_kod,ad,tarih,acik,miktar,kuru_mad,yag,tutar from ca_hrk_hiz
where bol_kod=:num
into :bol_kod,:ad,:tarih,:acik, :miktar,:kuru_mad,:yag,:tutar
)
tarih aralığına göre ve bol_kod a göre olacaksa da aşağıdaki gibi yapsın ama bu iki kriteri aynı SP içinde nasıl verebilirim.
CREATE PROCEDURE CARI_ISLEM_BOL_TAR_SP (
NUM NUMERIC(15,2),
TAR1 DATE,
TAR2 DATE)
RETURNS (
BOL_KOD NUMERIC(15,2),
AD VARCHAR(80),
TARIH DATE,
ACIK VARCHAR(60),
MIKTAR FLOAT,
KURU_MAD FLOAT,
YAG FLOAT,
TUTAR DECIMAL(15,2))
AS
begin
for
select bol_kod,ad,tarih,acik,miktar,kuru_mad,yag,tutar from ca_hrk_hiz
where bol_kod=:num and tarih between :tar1 and :tar2
into :bol_kod,:ad,:tarih,:acik, :miktar,:kuru_mad,:yag,:tutar
do
begin
suspend;
end
end
Yardımalrınız için teşekkürler...
Stored Proc. ile Şart belirtme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Stored Proc. ile Şart belirtme
"Bilginin Doruğuna Hep Birlikte..."
Tahmin ettiğiniz şekilde bir if kontrolu ile de bu dediğiniz yapılabilir. Firebird de if statement yazımını net hatırlamıyorum şu an. Fakat farklı bir yaklaşım ile de meseleyi halletmek mümkün. Mesela tarih değerlerinin dikkate alınmasını istemiyorsanız her iki tarih değerini de veya tarih değerlerinden bir tanesini null olarak gönderip SP de de aşağıdaki değişikliği yapmanız yeterli....
Kod: Tümünü seç
CREATE PROCEDURE CARI_ISLEM_BOL_TAR_SP (
NUM NUMERIC(15,2),
TAR1 DATE,
TAR2 DATE)
RETURNS (
BOL_KOD NUMERIC(15,2),
AD VARCHAR(80),
TARIH DATE,
ACIK VARCHAR(60),
MIKTAR FLOAT,
KURU_MAD FLOAT,
YAG FLOAT,
TUTAR DECIMAL(15,2))
AS
begin
for
select bol_kod,ad,tarih,acik,miktar,kuru_mad,yag,tutar from ca_hrk_hiz
where bol_kod=:num and (:tar1 is null or :tar2 is null or (tarih between :tar1 and :tar2))
into :bol_kod,:ad,:tarih,:acik, :miktar,:kuru_mad,:yag,:tutar
do
begin
suspend;
end
end
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

Allah razı olsun Fahrettin abi, ibexpertte çalıştı ama
bunu delphide nasıl çalıştırcam.Yani datetimepicker1 ve datetimepicker2 nin içini nasıl null göstereyim ki sadece bol_kod a göre listelesin.
Şu şekilde yaptım ama dediğim gibi null yapamadığım için tarih aralığınıda her zaman kriter kabul ediyor.
try
sp.Close;
sp.UnPrepare;
sp.SQL.Clear;
sp.SQL.Add('select *from CARI_ISLEM_BOL_TAR_SP(:a1,:a2,:a3)');
sp.Prepare;
sp.Params[0].AsString:=edit1.Text;
sp.Params[1].AsDateTime:=datetimepicker3.Date;
sp.Params[2].AsDateTime:=datetimepicker4.Date;
sp.Open;
except
showmessage('SP de hata oluştu');
end
end;
bunu delphide nasıl çalıştırcam.Yani datetimepicker1 ve datetimepicker2 nin içini nasıl null göstereyim ki sadece bol_kod a göre listelesin.
Şu şekilde yaptım ama dediğim gibi null yapamadığım için tarih aralığınıda her zaman kriter kabul ediyor.
try
sp.Close;
sp.UnPrepare;
sp.SQL.Clear;
sp.SQL.Add('select *from CARI_ISLEM_BOL_TAR_SP(:a1,:a2,:a3)');
sp.Prepare;
sp.Params[0].AsString:=edit1.Text;
sp.Params[1].AsDateTime:=datetimepicker3.Date;
sp.Params[2].AsDateTime:=datetimepicker4.Date;
sp.Open;
except
showmessage('SP de hata oluştu');
end
end;
"Bilginin Doruğuna Hep Birlikte..."
Kodlarınızı [ code] tagi icinde yazarsanız daha anlasilir olur....
Zannediyorum tarih seçmesseniz datetimepicker.Date nil oluyordu bunu kontrol ederek null gonderebilirsini... Veya seçmediğinizde durum ne ise ona göre bir kontrol koyabilirsiniz....
Kod: Tümünü seç
try
sp.Close;
sp.UnPrepare;
sp.SQL.Clear;
sp.SQL.Add('select *from CARI_ISLEM_BOL_TAR_SP(:a1,:a2,:a3)');
sp.Prepare;
sp.Params[0].AsString:=edit1.Text;
if datetimepicker3.Date=nil then
sp.Params[1].AsDateTime:=null
else
sp.Params[1].AsDateTime:=datetimepicker3.Date;
if datetimepicker4.Date=nil then
sp.Params[2].AsDateTime:=null
else
sp.Params[2].AsDateTime:=datetimepicker4.Date;
sp.Open;
except
showmessage('SP de hata oluştu');
end
end;
* http://www.fahrettin.org Manzara Fotoğraflarım... 
* http://delphiturkiye.gunduz.info Seminerler...
* http://www.hakmar.com.tr Kalite bir haktır...

* http://delphiturkiye.gunduz.info Seminerler...

* http://www.hakmar.com.tr Kalite bir haktır...

Kod: Tümünü seç
if datetimepicker1.Date=nil then
Fahrettin abi biz bunu Sp nin içinden if le yapamazmıyız.
ben sizin verdiğiniz örnekte old. gibi yaptım ve datetimepicker yerine 2 tane edit kodum onun içinden tarihi girdiriyorum.Bu şekilde çalışıyor ama
kullanıcı için datetimepicker daha kullanışlı.
Böyle birden fazla şartı aynı Sp içinde verdirmek için izleyeceğim yöntem ne olmalı?
Sp de if kullanımı ve is null benzeri fonksiyonların kullanımı hakkında yardımcı olursanız sevinirim.
Alllah Razı Olsun
Yardımalrınız için teşekkürler...
"Bilginin Doruğuna Hep Birlikte..."
SP her iki durumda da kullanılmak isteniyorsa WHERE kısmı şu şekilde olmalıı.
şeklinde yazarsan her iki durumda da çalışır. num u vermesen tarihe bakar, ilk tarihi vermesen baştan itibaren, son tarihi vermesen sonuna kadar.
Ayrıca
Kod: Tümünü seç
..
WHERE (:num is null or bol_kod=:num) and
((:tar1 is null or tarih >= :tar1) and (:tar2 is null or tarih <=:tar2))
Ayrıca
daki AsDateTime yerine Value yazılabilirsp.Params[2].AsDateTime:=null

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Çok Teşekkürler.
Sorgulamayı yaptım.
Ama Sp içinden birden fazla kriteri nasıl sorgularım bu konuda bir makale yada örnek gerekli gibi sanki.
Mesela ;
bolge koduna,tarihe,ada ve ödeme tipine göre rapor alıyorum varsayalım.
ben sadece bolge koduna göre,bolge kodu ve ödeme tpine göre, bolge kodu, ödeme tipi ve tarih aralığına göre kriter vereceğim zaman bunu sp de nasıl belirtirim.
Bana baya karşık geldi.
bunları yapabilirsek Sp ile cidden muhteşem olur.
Yardımlarınız için teşkkürler...
Allah Razı Olsun...
Sorgulamayı yaptım.
Ama Sp içinden birden fazla kriteri nasıl sorgularım bu konuda bir makale yada örnek gerekli gibi sanki.
Mesela ;
bolge koduna,tarihe,ada ve ödeme tipine göre rapor alıyorum varsayalım.
ben sadece bolge koduna göre,bolge kodu ve ödeme tpine göre, bolge kodu, ödeme tipi ve tarih aralığına göre kriter vereceğim zaman bunu sp de nasıl belirtirim.
Bana baya karşık geldi.
bunları yapabilirsek Sp ile cidden muhteşem olur.
Yardımlarınız için teşkkürler...
Allah Razı Olsun...
"Bilginin Doruğuna Hep Birlikte..."