şimdi firebirdde SP_SORGU adında SP yazalım
Kod: Tümünü seç
Select StokKodu, miktar, SatısFiyatı From Stokhareketi
Kod: Tümünü seç
IBQuery.SQL.Text:='Select * from SP_Sorgu';
IBQuery.open;
Kod: Tümünü seç
IBQuery.SQL.Text:='Select * from SP_Sorgu Where StokKodu='ST001'';
IBQuery.open;
şimdi SP yi biraz değiştireyim ve yeni SP aşağıdaki gibi olsun
her stoğun ayrı ayrı satış tutarlarını bulsun
Kod: Tümünü seç
Select StokKodu, Sum(Miktar*Fiyatı) as Tutar From Stokhareketi
group by StokKodu
Kod: Tümünü seç
IBQuery.SQL.Text:='Select * from SP_Sorgu ';
IBQuery.open;
Ancak form üzerinde bir Checkbox ve 2 adette Maskedit var, kullanıcı isterse Checboxı işaretleyerek maskeditlere 2 tarih girip bu 2 tarih arasındaki hareketlerin tutarlarını görmek isteyebilir. bu durumda delphi tarafından SP yi şöyle çağıyorum
Kod: Tümünü seç
IBQuery.SQL.Text:='Select * from SP_Sorgu where Tarih between :Tar1 and :tar2';
IBQuery.open;
SP içinde Tarih alanını seçersem bu kezde tarihe görede Group by ile Tarih alanını gruplama yapmam gerekecek ki bu sefer yanlış sonuç kümesi dönecek.
Sonuç:
SP de Select ile seçilmemiş bir alan Delphi tarafından Where ile karşılaştırlamıyor.
SP tarafında eğer o alanı seçersem ki SUM kullnıyorsam o alanı gruplamam da gerekecek, gruplarsam yanlış bir sonuç kümesi dönüyor.
Tarih bilgilerini parametre olarak SP ye aktararak yapmaya kalkarsam bu kez de kullnıcı tarih seçimi yapmaz kayıtların tamamını görmek isterse tarih değerleri SP ye null olarak döner ve ve yine hata alırım.
geriye tek bir çözüm kalıyor SP yi çöpe atıp delphi tarafından SQL kodlarla yapmak.
bu durumda da SP kullanmayarak performansı düşürmüş olacağız
bir türlü işin içinden çıkamadım lütfen yardım.