firebird de Yürüyen Bakiye ve CURSOR
Re: firebird de Yürüyen Bakiye ve CURSOR
Tahminen engelleyemezsin o işlemleri sql ile yaparsan daha sağlıklı olur. İşlem öncesinde bakiye sıfırla ya da bakiyeyi şu tarihler arasına topla gibi birşekilde çözersin. Alternatif olarak sorguyu yaptıktan sonra memory table'a aktarıp filitreleme işlemlerini orada yaparsın ama editleme yaptırmazsın.
....
Re: firebird de Yürüyen Bakiye ve CURSOR
Selam,
O işlemde önceden gelen devir bakiye önemli oluyor sonuçta, sorguyu çalıştırmadan önce seçilen başlangıç tarihinden önceki bakiyeyi alıp, bky# değişkenini sıfırladığın sorguya parametre olarak bu değeri gönderirseniz sorgu önceden gelen bakiyenin üzerinden işleme devam edeceği için bakiyeleriniz düzgün hesaplanacaktır diye düşünüyorum fakat deneme şansım olmadı.
O işlemde önceden gelen devir bakiye önemli oluyor sonuçta, sorguyu çalıştırmadan önce seçilen başlangıç tarihinden önceki bakiyeyi alıp, bky# değişkenini sıfırladığın sorguya parametre olarak bu değeri gönderirseniz sorgu önceden gelen bakiyenin üzerinden işleme devam edeceği için bakiyeleriniz düzgün hesaplanacaktır diye düşünüyorum fakat deneme şansım olmadı.
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: firebird de Yürüyen Bakiye ve CURSOR
merhaba;
paradox veri tabanıyla bir program yazmıştım. bu sorunu orada da yaşamıştım. dediğiniz gibi bir çözüm üretmiştim. ancak çok verimli olmuyordu. filitreleme sadece iki tarih arası yapılmıyor diğer alanlar içinde yapılmakta. bakiye alanı filitrelemelerden etkilenmemeli. bakiye etkilendiği zaman sanki hesaplama hatası varmış gibi bir izlenim bırakıyor. bu da olmuyor.
Bu kodda parametreyi FdQuery içinde belirterek yaklaşık 40000 kasa hareketinde 1-2 sn içinde sonuç aldım. filitrelemelerde nasıl bir sonuç üretiyor bilmiyorum. delphiden parametre gönderebilirsek filitrelemelerde sorun çıkarmazsa süper kod olur. vaktin varsa bir dene derim.
paradox veri tabanıyla bir program yazmıştım. bu sorunu orada da yaşamıştım. dediğiniz gibi bir çözüm üretmiştim. ancak çok verimli olmuyordu. filitreleme sadece iki tarih arası yapılmıyor diğer alanlar içinde yapılmakta. bakiye alanı filitrelemelerden etkilenmemeli. bakiye etkilendiği zaman sanki hesaplama hatası varmış gibi bir izlenim bırakıyor. bu da olmuyor.
Kod: Tümünü seç
EXECUTE BLOCK
RETURNS(ID BIGINT, BORC DOUBLE PRECISION, ALACAK DOUBLE PRECISION, KALAN DOUBLE PRECISION)
AS
DECLARE VARIABLE DYN_KALAN DOUBLE PRECISION;
BEGIN
DYN_KALAN = 0.00;
FOR
SELECT ID, Trunc(COALESCE(BORC,0),2), Trunc(COALESCE(ALACAK,0),2) FROM TBLKASAHAR WHERE (KASAID='7') and (DOVIZ='TL') ORDER BY TARIH asc, ID asc
INTO :ID, :BORC, :ALACAK DO
BEGIN
DYN_KALAN = DYN_KALAN + BORC - ALACAK;
KALAN = DYN_KALAN;
SUSPEND;
END
END;
İsteyen, yapabildiğinden daha fazlasını yapar.
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: firebird de Yürüyen Bakiye ve CURSOR
kodla ilgili kaynağı tekrar belirteyim ayıp olmasın
http://www.access-sql.com/Konu-Firebird ... Uygulamasi
istersen buraya da bak.
http://www.access-sql.com/Konu-Firebird ... Uygulamasi
istersen buraya da bak.
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: firebird de Yürüyen Bakiye ve CURSOR
Merhaba,
Benim bu konuda yazdıklarımı tekrar okuyup değerlendirseniz, belki faydalı olabilir.
Kolay gelsin.
Benim bu konuda yazdıklarımı tekrar okuyup değerlendirseniz, belki faydalı olabilir.
Kolay gelsin.
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: firebird de Yürüyen Bakiye ve CURSOR
merhaba;
akdatilla kardeş mesajını ara ara okudum ama inan dediğini anlamaya bilgim yetmedi. yinede ilgin için teşekkür ederim.
boreas hocam;
Öncelikle firebirdde #bky adında kullanıcı tanımlı bir değişken açıp içeriğini sıfıra eşitledim.
demişsiniz.
size sormak istediğim #bky değişkenine değer nasıl gönderebilirim. ilk değerini sıfır değilde iki tarih arası filitreleme yaparken daha önceki kayıtların borc ve alacak kayılarının toplamını alıp o tarihe kadar olan bakiyeyi buluyorum. bulduğum bakiye değerini bky# değişkenine göndererek bakiyeyi hesaplatırsam yürüyen bakiyede hatalı bakiye oluşmaz diye düşünüyorum.
akdatilla kardeş mesajını ara ara okudum ama inan dediğini anlamaya bilgim yetmedi. yinede ilgin için teşekkür ederim.
boreas hocam;
Öncelikle firebirdde #bky adında kullanıcı tanımlı bir değişken açıp içeriğini sıfıra eşitledim.
Kod: Tümünü seç
SELECT rdb$set_context( 'USER_TRANSACTION' ,'bky#' ,0) from rdb$database;
size sormak istediğim #bky değişkenine değer nasıl gönderebilirim. ilk değerini sıfır değilde iki tarih arası filitreleme yaparken daha önceki kayıtların borc ve alacak kayılarının toplamını alıp o tarihe kadar olan bakiyeyi buluyorum. bulduğum bakiye değerini bky# değişkenine göndererek bakiyeyi hesaplatırsam yürüyen bakiyede hatalı bakiye oluşmaz diye düşünüyorum.
İsteyen, yapabildiğinden daha fazlasını yapar.
Re: firebird de Yürüyen Bakiye ve CURSOR
Parametre kullanarak tabiki. Sonuçta bir sorgu gönderiyorsunuz.
Mesela QBakiyeSifirla query sine yazdınız kodu ama yazarken şöyle yapın,
deger isminde bir parametre belirledik, Sorguyu close/open yapıyorsunuz bky değerini sıfırlamak için, bunun yerine;
yaparsanız değer 100 den başlıyacaktır.
Mesela QBakiyeSifirla query sine yazdınız kodu ama yazarken şöyle yapın,
Kod: Tümünü seç
SELECT rdb$set_context( 'USER_TRANSACTION' ,'bky#' , :deger) from rdb$database;
Kod: Tümünü seç
QBakiyesifirla.Close;
QBakiyesifirla.ParamByName('deger').AsFloat:=100;
QBakiyesifirla.Open;
-
- Üye
- Mesajlar: 386
- Kayıt: 02 Tem 2007 09:43
Re: firebird de Yürüyen Bakiye ve CURSOR
çok teşekkür ederim. güzel oldu.
İsteyen, yapabildiğinden daha fazlasını yapar.