FireBird de Sp ilemi OnCalc İlemi

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ı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

FireBird de Sp ilemi OnCalc İlemi

Mesaj gönderen musti »

Şöyle bir Muhasebe Vt miz olsa.
Kod, Ad olan bir table ve bu kodlara ait transaction lar (Tarih,borc, alacak) olan bir baska table

Raporumuzda Kod,Ad,Bakiye olsa
Bakiye ilgili bir sp olustursak kod a göre Borc-Alacak

4000 adte kod ve ad olsu ve bunların her birinin 1000 adet transaction u olsa ki bu firebird için oyuncak.

Bu raporda sizce mantıklı olan Sp de mi genel raporu almak yada OnCalculator olayın bir kod ekleyin her bir kod ekrana geldigi zaman sadece o koda ait bakiye olan bir sp mi calıştırmak mantıklı.
Bu yöntem networku yoruyor olabilir cunku 4000 defa sp calisacak(bu rapor sonlanan kadar olan işlem oluyor cunku ekranda kac adet kod varsa ornek 20 satır 20 defa oncalc çalışıyor bir sonra ki sayfada bir 20 daha oyle oyle gidiyor) . Ama Butun hepsinin bir anda geldigi sp den cok daha hızlı oluyor. ben burda hızı tercih etsem hatamı etmiş olurum. Yada farketmezmi
En son musti tarafından 30 Ara 2005 07:34 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
mege
Admin
Mesajlar: 2360
Kayıt: 05 Şub 2004 04:32
Konum: Beşiktaş
İletişim:

Mesaj gönderen mege »

:? bazı kvramlarda hata var galiba ama, neyse anladığım kadarıyla
:ara computed field lar işinizi görür :)
.-.-.-.-.-.-.-. ^_^
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Mesaj gönderen musti »

biraz cok yanlis anlamıssın abi
benim birleştirme derdim yok.
sadece sp(store procedure) ile yapılan bir sorgulama ile tek tek IBx bilesşenleri kullanrak OnCalculated eventina kod yazmak mı mantıklı yoksa butun kodu sp ile bir anda almakmı mantıklı demiştim.
hatta sp yi yazayım
eğer oncalc eventinle cozeceksem

select sum(borc),sum(alacak) from harekettable
where kodu=:kodu

yok hepsini sp ile cozum butun bir sonucu yani 4000 kartın tamamının bakiyesini vt den alacaksam

select kart.kodu,kart.adi,sum(borc),sum(alacak) from hareket,kart
where kart.kodu=hareket.kod
tabiki group by kart.kodu,kart.adi



sonucda bu basit bir bakiye sorgulaması ikisini farkıda bakiye olacak. Neden anlamadım anlayamadım.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Tabi ki istediğin bilgileri VT tarafında SP içinde hesaplatıp çekmek en mantıklısıdır. Ancak SP de yapamıyacağın yada zor olan işlemleri delphi tarafında yapmak gerekir. Hatta onu bile delphi ile yazacağın UDF yi VT den kullanarak çözebilirsin. Vel hasılı perfomans için veriler ambardayken ayıklamak en makbuludur :idea:

Burada sadece perfomansı düşünmeyip, Referential Integrity (veri bütünlüğü - tutarlılık) yi de düşünmek lazım. VT ye, yazdığın program haricinden de ulaşılabileceğini düşünüp, yapılacak işlemleri VT de, SP ve trigger lerle yapmalısın :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Mesaj gönderen musti »

hocam ,
hızda cok fark ediyor. Sp ile butunu almaktansa sp ile tek tek oncalc ile almak arasında cok fazla hız farkı var. Sebebi malum oncalc da ekrana geldik ce sp calisiyor diğerinde butun sp calisiyor bitince hepsi birden ekrana geliyor.
Acaba her bir kod icin bir sp calistirmak networku ne kadar yorar yada bu yormasına almıs oldugumuz performans degermi
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Sanırım yanlış anlama oldu. Ben Delphi tarafındaki OnCalculeted field da yaptığın işlemi SP de yapıp her kayıt için SP yi çağır demek istemedim. Calculeted field daki alanı SP içinde hesaplatabiliyorsan, işlemi orada yapıp oluşturacağın alanları doğrudan DataSet e al (SP yi tablo gibi IBQuery ile kullan). En yüksek perfomansa bu şekilde ulaşabilirsin.. :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Mesaj gönderen musti »

Her ikisinide yapabiliyorum abi.
ama sp yi direk IBQuery e almaktansa IBQuery nin Oncalc eventi ile sadece o an ekrana gelen kodun sp sini almak cok daha hız lı oluyor. Cunku kullanıcı onüne anında delince bir sonraki sayfa bir sonraki sayfa diye diye ilerliyor. Her bir sayfa degisince Oncalc caslsıtıgı ve sadece o ekrandaki orneğin cari kodun borc - alacak ve bakiyeleri geldigi icin müşteri beklememiş oluyor ama arka planda her bir cari kod icin sp birdefa calisiyor bu ne kadar rantabıl onu merak ediyor.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

OnCalculete de neler yaptığını yazmadın. Fakat ben olsam SP de yapabilecğim bir şey için ayrıca delphi tarafı kullanmazdım :idea: Diyelim IBExpert le ilgili SP yi select alan1, alan2, alan3 from sp_deneme şeklinde almaya kalktın istediğin sonucu alabilecek misin :?:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
musti
Üye
Mesajlar: 527
Kayıt: 11 Tem 2005 09:44

Mesaj gönderen musti »

tabi tabi abi,

saıırım be tam alamadım benim merak ettipğim.
Örnek:

cari_Kod, cari_Ad olan bir table(karttable) ve bu kodlara ait transaction lar cari_kod,tarih,borc,alacak alaları oldugu harekettable

4000 adet cari_kod ve cari_ad olan karttable ve bunların her birinin 1000 adet transaction olan harekettable var.

sp mizde soyle olsun

select cari_kod,cari_adi, sum(borc)borc,sum(alacak)alacak ,sum(borc) - sum(alacak) bakiye from harekettable,karttable
where cari_kod=cari_kod


1. yontem select * from sp diyip IBQuery1 yi Open etmek ve sonra Qucikreport preview demek

2. yontem
IBQuery2 icie select * sp where cari_kod=:cari kod demek
IBQuery1 nin OnCalculator olayın IBQuery2 Open etmek yani her bir Cari_Kod icin bir IBQuery2 acıp kapamak
Bu yontem 1.yontem den cok daha goze gelen hız var.
Bu yöntem networku yoruyor olabilir cunku 4000 defa sp calisacak(bu rapor sonlanan kadar olan işlem oluyor cunku ekranda kac adet kod varsa ornek 20 satır 20 defa oncalc çalışıyor bir sonra ki sayfada bir 20 daha oyle oyle gidiyor) . Ama Butun hepsinin bir anda geldigi sp den cok daha hızlı oluyor. ben burda hızı tercih etsem hatamı etmiş olurum. Yada farketmezmi
Cevapla