FireBird de Sp ilemi OnCalc İlemi
FireBird de Sp ilemi OnCalc İlemi
Şö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
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.



.-.-.-.-.-.-.-. ^_^
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.
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.
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 
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

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

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
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
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
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.. 

Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
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.
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.
OnCalculete de neler yaptığını yazmadın. Fakat ben olsam SP de yapabilecğim bir şey için ayrıca delphi tarafı kullanmazdım
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!!
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
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