firebird hatasımı acaba ?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
firebird hatasımı acaba ?
slm arkadaşlar
Database olarak firebird 2.0 kullanıyorum
Arkadaşlar benim anahtar alanı fis_num ve fis_sir olan bir table'ım var
bu table'nin içinde brc_tut numeric(15,2) ve alc_tut numaric(15,2)
olan bir alanım var ve her fis için bu iki alanın toplamı eşit olması gerekiyor
şimdi beni şöyle bir sql im var
SELECT FIS_TAR,FIS_NUM,
SUM(BRC_TUT) AS BRC_TUT,SUM(ALC_TUT) AS ALC_TUT,
SUM(BRC_TUT)- SUM(ALC_TUT) as bakiye FROM hesap
Whre FIS_NUM= "65"
GROUP BY FIS_TAR,FIS_NUM
bu sql cümleciğini sonucu brc_tut = 718,38 alc_tut=718,38 ve bakiye is
1,13686837721616E-13 çıkıyor normalde bakiye=0 olmalıydı
aynı sql cümleciğini şu şekilde çalıştırdığımda ise
SELECT SUM(BRC_TUT) AS BRC_TUT,SUM(ALC_TUT) AS ALC_TUT,
SUM(BRC_TUT)- SUM(ALC_TUT) as bakiye FROM hesap
Whre FIS_NUM= "65"
brc_tut = 0, alc_tut=0, bakiye=0 veriyor
sonuç olarak group by koyarak aldığım sonuç yanlış, acaba problemin sebebi nedir
bu konuda bir bilgisi ve fikri olan arkadaşlara şimdiden tşk eder iyi çalışmalar dilerim
Database olarak firebird 2.0 kullanıyorum
Arkadaşlar benim anahtar alanı fis_num ve fis_sir olan bir table'ım var
bu table'nin içinde brc_tut numeric(15,2) ve alc_tut numaric(15,2)
olan bir alanım var ve her fis için bu iki alanın toplamı eşit olması gerekiyor
şimdi beni şöyle bir sql im var
SELECT FIS_TAR,FIS_NUM,
SUM(BRC_TUT) AS BRC_TUT,SUM(ALC_TUT) AS ALC_TUT,
SUM(BRC_TUT)- SUM(ALC_TUT) as bakiye FROM hesap
Whre FIS_NUM= "65"
GROUP BY FIS_TAR,FIS_NUM
bu sql cümleciğini sonucu brc_tut = 718,38 alc_tut=718,38 ve bakiye is
1,13686837721616E-13 çıkıyor normalde bakiye=0 olmalıydı
aynı sql cümleciğini şu şekilde çalıştırdığımda ise
SELECT SUM(BRC_TUT) AS BRC_TUT,SUM(ALC_TUT) AS ALC_TUT,
SUM(BRC_TUT)- SUM(ALC_TUT) as bakiye FROM hesap
Whre FIS_NUM= "65"
brc_tut = 0, alc_tut=0, bakiye=0 veriyor
sonuç olarak group by koyarak aldığım sonuç yanlış, acaba problemin sebebi nedir
bu konuda bir bilgisi ve fikri olan arkadaşlara şimdiden tşk eder iyi çalışmalar dilerim
Küsüratlarda öyle problemler çıkabiliyor.. Daha önce konuşmuştuk.. Şöyle bir ali cengiz oyunu ile aşabilirsiniz
IBExpert veya benzeri bir yönetim aracı ile şöyle bir deneme yapabilirsin:

Kod: Tümünü seç
SELECT SUM(1.00 * BRC_TUT) AS BRC_TUT, SUM(1.00 * ALC_TUT) AS ALC_TUT,
SUM(1.00 * BRC_TUT) - SUM(1.00 * ALC_TUT) as bakiye FROM hesap
Whre FIS_NUM= "65"
Kod: Tümünü seç
select 2 / 3, 2 / 3.00, 2 / 3.00000 from rdb$database
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Hocam cevabınız için çok tşk ederim
tarif ettiğiniz şekilde denedim ama hiçbirşey değişmedi.. birde dikkatimi çek bunu her sayıda yapmıyır bazı sayılarda yapıyor .
başka önerileriniz varsa bekliyorum tıknadım kaldım... birazda hayal kırıklığına uğradım daha doğrusu.. sonuçta matematik matematiktir 2+2=4 eder.. brc_tut doğru alc_tut ta doğru brc-alc yapıyoruz sonuç yanlış bir türlü anlayamadım..
yardımlarınızı bekliyorum

başka önerileriniz varsa bekliyorum tıknadım kaldım... birazda hayal kırıklığına uğradım daha doğrusu.. sonuçta matematik matematiktir 2+2=4 eder.. brc_tut doğru alc_tut ta doğru brc-alc yapıyoruz sonuç yanlış bir türlü anlayamadım..
yardımlarınızı bekliyorum
o sayı zaten 0 oluyor. cast ile sayı için uygun bir tip belirtirseniz sorun olacağını zannetmem. kolay gelsin.bu sql cümleciğini sonucu brc_tut = 718,38 alc_tut=718,38 ve bakiye is
1,13686837721616E-13 çıkıyor normalde bakiye=0 olmalıydı
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Tanımladığın alanları NUMERIC olarak değil de DOUBLE PRECISION olarak tanımlayarak deneyebilir misin?
Sonuçta fark sıfır değilse aynı dediğin SUM'lar da aynı değil anlamı çıkıyor.
Basit bir query ile bunu test edebilirsin.
Bu query sonuç döndürmüyorsa zaten sıfırdan farklı anlamı çıkacak.
Yani gerçekten de zaten sıfır değil fark demek olacak.
Sonuçta fark sıfır değilse aynı dediğin SUM'lar da aynı değil anlamı çıkıyor.
Basit bir query ile bunu test edebilirsin.
Kod: Tümünü seç
SELECT SUM(BRC_TUT) AS BRC_TUT,SUM(ALC_TUT) AS ALC_TUT,
SUM(BRC_TUT)- SUM(ALC_TUT) as bakiye FROM hesap
Whre FIS_NUM= "65"
HAVING SUM(BRC_TUT) = SUM(ALC_TUT)
Yani gerçekten de zaten sıfır değil fark demek olacak.
Sayın aslangeri arkadaşım verdiğin bilgi için tşk ederim .
o sayı zaten sıfır oluyor demişşin ama ben if bakiye=0 then dediğimde
then 'den sonrasını işlemesi gerekiyor ama işlemiyor demekki sayı sıfır değil. ama cast 'tan bahsetmişşin birkaç örnek denedim yine olmadı
birde sen cast la ilgili bir kullanım şekli yazarsan sevinirim.
ilgin için tşk ederim
o sayı zaten sıfır oluyor demişşin ama ben if bakiye=0 then dediğimde
then 'den sonrasını işlemesi gerekiyor ama işlemiyor demekki sayı sıfır değil. ama cast 'tan bahsetmişşin birkaç örnek denedim yine olmadı
birde sen cast la ilgili bir kullanım şekli yazarsan sevinirim.
ilgin için tşk ederim
Arkadaşlar ben en iyisi size table nin içeriğini vereyim
Fis_no Sıra No Brc_Tut Alc_Tut
------- -------- ---------- ---------
65 : 1 : 245,95 : 0
65 : 2 : 28,33 : 0
65 : 3 : 0 : 274,28
65 : 4 : 7,11 : 0
65 : 5 : 1,28 : 0
65 : 6 : 0 : 8,39
65 : 7 : 431,4 : 0
65 : 8 : 4,31 : 0
65 : 9 : 0 : 435,71 (görüntü için özür dilerim ayarlayamadım)
simdi arkadaşlar
select sum(brc_tut),sum(alc_tut),sum(brc_tut-alc_tut) as bakiye from hesap
sonuc brc_tut = 718,38 , alc_tut = 718,38 , bakiye=0 bu sonuç doğru
aynı sql i şu şekilde yazıyorum
select Fis_No,Sira_No,sum(brc_tut),sum(alc_tut),sum(brc_tut-alc_tut) as bakiye from hesap
Group by Fis_No,Sira_No
sonuc brc_tut = 718,38 , alc_tut = 718,38 , bakiye=1,13686837721616E-13
bakiye sıfır olması gerekirken çok ufak bir rakam bu problemin çözümünü arıyorum yardımlarınızı acil bekliyorum....
benmi hata yapıyorum acaba firebird mü?
Fis_no Sıra No Brc_Tut Alc_Tut
------- -------- ---------- ---------
65 : 1 : 245,95 : 0
65 : 2 : 28,33 : 0
65 : 3 : 0 : 274,28
65 : 4 : 7,11 : 0
65 : 5 : 1,28 : 0
65 : 6 : 0 : 8,39
65 : 7 : 431,4 : 0
65 : 8 : 4,31 : 0
65 : 9 : 0 : 435,71 (görüntü için özür dilerim ayarlayamadım)
simdi arkadaşlar
select sum(brc_tut),sum(alc_tut),sum(brc_tut-alc_tut) as bakiye from hesap
sonuc brc_tut = 718,38 , alc_tut = 718,38 , bakiye=0 bu sonuç doğru
aynı sql i şu şekilde yazıyorum
select Fis_No,Sira_No,sum(brc_tut),sum(alc_tut),sum(brc_tut-alc_tut) as bakiye from hesap
Group by Fis_No,Sira_No
sonuc brc_tut = 718,38 , alc_tut = 718,38 , bakiye=1,13686837721616E-13
bakiye sıfır olması gerekirken çok ufak bir rakam bu problemin çözümünü arıyorum yardımlarınızı acil bekliyorum....
benmi hata yapıyorum acaba firebird mü?
Verdiğin rakamlardan (kayıtlardan) en az bir tanesi verdiğinden farklı. Yani çok küçük küsüratı var anlamı çıkıyor.
Bunu da ancak kodla kayıtları tek tek kontrol ederek tespit edebilirsin.
Denemende fayda var.
Yani şuna benzer bir kontrol:
if Table1.FindField('Brc_Tut').AsFloat <> StrToFloat(FormatFloat('0.00', Table1.FindField('Brc_Tut').AsFloat)) then...
gibi.
Bunu da ancak kodla kayıtları tek tek kontrol ederek tespit edebilirsin.
Denemende fayda var.
Yani şuna benzer bir kontrol:
if Table1.FindField('Brc_Tut').AsFloat <> StrToFloat(FormatFloat('0.00', Table1.FindField('Brc_Tut').AsFloat)) then...
gibi.