ibase_query ile yapılan sorguda hesaplama sorunu

Web tabanlı uygulama geliştirme araçları(PHP, ASP vb...) ile ilgili konuları buraya yazabilirsiniz.
Cevapla
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

ibase_query ile yapılan sorguda hesaplama sorunu

Mesaj gönderen esistem »

Arkadaşlar merhaba;
Uzun zamandır bişi sormuyordum foruma ama aklıma geldi bir kaç ay önce yaptığım bir projede bir sorun ile karşılaşmıştım az önce karşıma çıktı yine bilgisi olan arkadaşlar varmıdır diye yazayım dedim.

Firebird veritabanından appserv üzerinde php ile ibase_connect ve ibase_query kullanarak sorgu yapıyorum,
sorgum şudur;

Kod: Tümünü seç

$satilan = listevtf("SELECT ISLEMTURU, sum(CIKAN) AS SATISMIKTARI, SUM(FIYAT*CIKAN) AS SATISTUTARI
from STOK_ISLEM_BAYI 
WHERE STOKKODU="1" AND ISLEMTURU=5
GROUP BY ISLEMTURU");
buradaki listevtf fonksiyonu açılımı ;

Kod: Tümünü seç

$this->result = ibase_query($connf)
şeklinde bir ibase query sorgusu.

Sorun şu oluyor, sorgudan dönen kayıtları ekrana basarken, SUM(FIYAT*CIKAN) AS SATISTUTARI ile gelen SATISTUTARI nın nedense düzgün hesaplanmadığını görüyorum, satış tutarını listelerken

Kod: Tümünü seç

$satilan[0][SATISTUTARI]*10
yazarsam satış tutarı doğru çıkıyor, yani sorgudan bana dönen sonuç nedense gerçek değerin 10'a bölünmüş hali oluyor, yani satış tutarı 100 tl dönmesi gerekirken 10 tl dönüyor.

Fakat aynı sorguyu Delphi içinden query ile yaparsam sonuç düzgün çıkıyor.

Böyle bir problemle karşılaşmış olan varmıdır acaba aranızda? bu bir bug olabilirmi ve bilinen bir bug mudur acaba diye merak ettim.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: ibase_query ile yapılan sorguda hesaplama sorunu

Mesaj gönderen Battosai »

Yazdıklarınızdan bir çıkarım yapmak güç. Ama bahsettiğiniz şeklinde bir hata "bug" değil "fatal error" olur :) Yani temel bir işlev olan sorgu ve sonucunu döndürmede böyle bir açık olması ihtimal dışıdır. SUM ile hesaplanan alanlarda NULL değer olursa işlem doğru sonuç vermemektedir. Belki ondan olabilir diyeceğim fakat her sorgu için 10 ile çarpım doğru hesap veriyorsa sorun PHP kodlarınızda olabilir... Kodlarınızı biraz daha açık ederseniz daha iyi olur.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: ibase_query ile yapılan sorguda hesaplama sorunu

Mesaj gönderen esistem »

Tekrar merhaba, kodlarda bir hata olduğunu zannetmiyorum ki zaten ortada kod da yok sadece sorgu var,

Kod: Tümünü seç

SELECT SUM(GIREN-CIKAN) AS KALAN
şeklindeki sorgu sonucu doğru çıkarken,

Kod: Tümünü seç

SELECT SUM(FIYAT*CIKAN) AS TUTAR
sorgu sonucu ne hikmetse gerçek sonucun 1/10 unu veriyor.
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: ibase_query ile yapılan sorguda hesaplama sorunu

Mesaj gönderen esistem »

yok arkadaş olmadı, class yazdım olmadı standart kodlarla bağlanıp denedim olmadı, 32 bit 64 bit işletim sistemi denedim olmadı, win 7 ve win xp denedim olmadı, appserv de bu ibase_query neden böyle çalışıyor anlamadım.

Kod: Tümünü seç

SELECT FIYAT

diyorum, sonuç 30 çıkıyor.

Kod: Tümünü seç

SELECT CIKAN

diyorum sonuç 1 çıkıyor

Kod: Tümünü seç

SELECT (FIYAT*CIKAN) AS TUTAR
diyorum TUTAR=3 diyor

aynı sorguyu ibexpert te yapıyorum sorun yok.
ağlamak istiyorum :(
Kullanıcı avatarı
esistem
Üye
Mesajlar: 464
Kayıt: 02 Eki 2007 11:22
İletişim:

Re: ibase_query ile yapılan sorguda hesaplama sorunu

Mesaj gönderen esistem »

Kod: Tümünü seç

SELECT SUM ( FIYAT * ROUND(CIKAN) ) AS TUTAR
Şeklinde yapılırsa sorun çözülüyor. Fakat şu an programı kullanan firmada miktarlar tamsayı, ondalıklı olursa yine çalışmıyor :(
Problem sanırım firebird deki alan tipinden kaynaklanıyor, bende alanlar decimal(10,2) şeklinde tanımlı.
Cevapla