Bu işi yapmanın en kolay kolay yolu firebird e geçmektir diye düşünüyorum
daha önce bu konuyu firebird de rdb$set_context ile 'USER_TRANSACTION' kullanarak bir
sonuca bağlamıştık ve kesin çözüm üretmiştik. Access, paradox gibi veritabanlarında çözümü
daha önce kendim şöyle bulmuştum ama biraz alengirli bir çözüm Kısaca anlatayım.
tablonuz alanlarını şu şekilde düzenleyin,
KOD, TARIH, ARTANKOD, BORC, ALACAK (TAHSILAT) vs.vs.
burada ARTANKOD bizim işimizi çözecek alandır,
ilk kaydı girdiğinizde (bu arada ARTANKOD alanınız kesinlikle ondalıklı
alan olmalıdır biz ondalık kısmınız 2 hane olarak düşünelim 3 veya 4
yapılırsa daha çok kayıt girilebilir) ARTANKOD alanınızı mesela 1,00 diye verin,
2. kayıt da 2,00 yapın bu ne demektir biz araya 1,01 - 1,02 - 1,03 -1,04 ....
şeklinde 99 adet daha kayıt ekleyebiliriz demek oluyor (buda yazacağımız sorguda
benzersiz bir ARTANKOD alanımız olmasını sağlıyacak bize). mesela kayıtlarımız şöyle olsun;
KOD - TARIH - ARTANKOD- BORC - ALACAK
1 - 10.02.2016 - 1,00 - 100 - 0
2 - 15.02.2016 - 2,00 - 0 - 100
eğer 15.02.2016 tarihinden sonra mesela 12.02.2016 tarihinede bir kayıt eklemek istedik,
o zaman yeni kaydımızı şu şekilde eklemeliyiz ki ARTANKOD alanımız sıralı gitsin.
3 - 12.02.2016 - 1,01 - 150 - 0
peki bunu nasıl yaparız ? tabiki before_post olayında, ARTANKOD alanımızı yeni gireceğimiz
tarihten küçük yada eşit tarihteki değerini 0,01 arttırarak;
Kod: Tümünü seç
QueryArtanKodVer ('SELECT MAX(ARTANKOD) AS ARTANKOD FROM CARI_ISLEM WHERE TARIH<=:TARIH')
kayıttaki artan kodumuz QueryArtanKodVerARTANKOD.value+0,01 olmuş olacaktır. Yeni kaydımızı
bu şekilde girdikten sonra yürüyen bakiye sorgumuz da aşağıdaki gibi olursa problemsiz bir
yürüyen bakiye sorgumuz olmuş olacaktır.
Kod: Tümünü seç
SELECT C.TARIH, C.BORC, C.ALACAK,
(SELECT
SUM(BORC)-SUM(ALACAK) FROM CARI_ISLEM B
WHERE B.ARTANKOD<=C.ARTANKOD AND CARIKODU=:CKOD)
AS BAKIYE
FROM CARI_ISLEM C
WHERE CARIKODU=:CKOD ORDER BY ARTANKOD // burada artankod alanımız tarihleride otomatik sıraya dizdiği için sorun kalmaz
Not: Bu arada BORC ve ALACAK alanlarınız kesinlikle NULL değer içermemelidir.
2. Edit : bu arada eğer yeni kaydınızın tarihi önceki kayıtlarınızdaki tarihlerden büyük veya eşitse ARTANKOD alanınızı 1,00 arttırmanız gerekir ki daha sonra arasına kayıt sokmamıza imkan versin, birer birer arttırmak yerine 2 şer yada 3 er 3 er arttırmak araya daha fazla girmenizi sağlıyacaktır. artık onuda siz ayarlarsınız.