Firebird stored procedure ile master detail sorgu olur mu

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
sen
Üye
Mesajlar: 34
Kayıt: 04 Tem 2003 12:33
Konum: Ankara

Firebird stored procedure ile master detail sorgu olur mu

Mesaj gönderen sen » 13 Ara 2005 05:49

sa.

arkadaşlar örneğin firebird ile şöyle bir procedure var .

CREATE PROCEDURE PDENEME_A (
PALAN VARCHAR (1024))
RETURNS (
KODU VARCHAR (15),
HESAP_TURU VARCHAR (30),
CARI_ISMI VARCHAR (50),
REFERANSI VARCHAR (25),
VADESI TIMESTAMP,
TUTAR_TL DOUBLE PRECISION)
AS
begin
FOR
EXECUTE STATEMENT :PALAN
into :CARI_ISMI,REFERANSI,HESAP_TURU, VADESI ,TUTAR_TL ,KODU
do

suspend;

end

ve ibquery1 ile 'SELECT * FROM PDENEME_A ('SELECT KODU,HESPA_TURU,CARI_ISMI,REFERANSI,VADESI,TUTAR_TL FROM VERILER WHERE KODU='001' ') gibi bir sorgu yaptığımızı varsayalım.
Tıpkı bir tablo gibi. Problem yok.
Peki bu dönen sonuçları ; örnek olarak 'SELECT SUM(TUTAR_TL) FROM PDENEME_A WHERE CARI_ISIM=:CARI_ISMI') gibi tekrar başka bir sorguyla master detail sorgu yapılabilir mi. Bu kodu örnek için verdim.
kısaca bir procedure den dönen sonuçları tekrar bir sorguya daha tabi tutabilirmiyim.
herkese teşekkürler.......

Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 08:44

Mesaj gönderen musti » 13 Ara 2005 10:25

içi içe select ile yapılabilr düşüncesindeyim.

sonucda procedure her şeyi ile hazırlanmış bitmiş bir sonuc table dır.

kolay gelsin

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4319
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri » 14 Ara 2005 01:06

s.a.
sp ile çektiğin verileri (ibdataset,ibquery, ibsql) hangi bileşeni kullanırsan kullan select kısmında where kullanarak ekstra filtrelemeye tabi tutabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim

sen
Üye
Mesajlar: 34
Kayıt: 04 Tem 2003 12:33
Konum: Ankara

Mesaj gönderen sen » 14 Ara 2005 08:34

sayın aslangeri sağolasın ama where kullanarak ekstra filtrelemeye tabi tutulacağının farkımdayım.
raporlarda master detail kullanmam lazım.
benim merak ettiğim dönen değeri, bir başka sorguya daha tabi tutulabilir mi.
gerekirse bir başka prosüdür ile de olabilir mi acaba.

Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4319
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri » 14 Ara 2005 08:41

evet olabilir
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim

Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can » 14 Ara 2005 09:14

Belirttiğin STORED PROCEDURE'de sorun olmadığına emin misin? Yani CREATE edip belirttiğin SELECT işlemini yapabildin mi?

sen
Üye
Mesajlar: 34
Kayıt: 04 Tem 2003 12:33
Konum: Ankara

Mesaj gönderen sen » 14 Ara 2005 11:07

tabi... EXECUTE STATEMENT :PALAN ile değişik SQL leri text olarak gönderilebilir.
sorumu şöyle açıklayayım. yukardaki procedureyi şöyle çağıralım..

IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Text:=( 'SELECT CARI_ISMI,REFERANSI,HESAP_TURU, VADESI ,TUTAR_TL TUTAR_TL ,KODU FROM PDENEME_A'
+' ('SELECT KODU,HESAP_TURU,CARI_ISMI,REFERANSI,VADESI,TUTAR_TL FROM VERILER WHERE KODU='001' ')'
+' WHERE REFERANSI='Ankara' ORDER BY HESAP_TURU ');
IBQuery1.Open;

(tırnaklar yanlışlıklarını gözardı edin örnek için verdim....)

bu sorgu, procedure sayesinde koşullara uygun verileri getirdi diyelim.
ben procedureyi bu haliyle dururken ,ikinci bir sorguyuda şöyle yapmak istiyorum

IBQuery2.DataSource:=IBQuery1Datasource; yani IBQuery2, IBQuery1 e bağlı olsun.

IBQuery2.Close;
IBQuery2.SQL.Clear;
IBQuery2.SQL.Text:=( 'SELECT CARI_ISMI, sum(TUTAR_TL) as TUTAR_TL FROM PDENEME_A'
+' WHERE CARI_ISMI=:CARI_ISMI {bu cari_ismi IBQuery1 deki cari_ismi ne bağlı}
+' GROUP BY CARI_ISMI ');
IBQuery2.Open;

bu kod çalışmaz. ama mantık olarak sunmak istedim.

yani precedure den dönen sonucu başka bir IBQueryX ile master detail sorguya daha tabi tutmak istiyorum.
procedureyi aynen bir tablo gibi sorgulamak istiyorum. nasıl ki bir tabloya farkıl birden fazla IBQueryX lerle, farklı sorgular uygulanıyorsa....

Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can » 14 Ara 2005 11:44

Tam sorununuzu anlamadım ama eğer anladığım ise şu örnek işinize yarayabilir:

File ---> New ---> Other menüsüne girin.

Business ---> Database Form Wisard'ı seçin.

Create a master/detail form ve
Create a form using TQuery objects'i seçerek adım adım örnek bir master/detail form hazırlarsanız oradan hareketle TIBQuery ile benzer master/detail yapıda form veya datamodule hazırlayabilirsiniz.
Burada önemli olan detail TQuery'de Datasource'un aldığı değer.

İyi çalışmalar.

Cevapla