Öncelikle herkese kolay gelsin. Yine saçma sapan aynı zamanda çok anlamsız ve bazı değerlerde problem yapan bazı değerlerde yapmayan istikrarsız bir problem ile karşı karşıyayım. Delphi 10.2 ve SQLExpress kullanıyorum. Aşağıda görülen kod bloğu le "StokHareket" tablosundan stok kartlarına ait depo giriş ve çıkış hareketlerini okuyup stok ve depo bazında "StokMizan" tablosuna update sql ile "CIKANMIK" alanına mevcut değerin üzerine toplayarak yazıyorum. Aşağıda koda baktığınızda bu dediğimi zaten hemen göreceksiniz. "CIKANMIK" alanının başlangıç değeri 0 (Sıfır) ve alan tipi "Float".
StokHareket tablosudan gelen değerler ve "CIKANMIK" alanının aldığı değerler :
1. Değer 18 --> CIKANMIK değeri = 18 Oluyor, doğru.
2. Değer 15.56 --> CIKANMIK değeri = 33.56 Oluyor, doğru.
3. Değer 6.2 --> CIKANMIK değeri = 39.760000000000005 Oluyor, işte burada çıkamıyorum işin içinden.
4. Değer 13.1 --> CIKANMIK değeri = 52.860000000000007 şeklide devam ediyor.
Yukarıda tabloda anlatmaya çalıştığım gibi 6.2 değeri gelene kadar "StokMizan" tablosunda "CIKANMIK" değeri doğru toplanıyor fakat 6.2 geldikten sonra saçmalıyor. "StokMizan" tablosunda "CIKANMIK" alanının değeri 39.76 olması gerekirken, 39.760000000000005 gibi bir değer oluyor. "StokMizan" tablosuna "StokHareket" tablosundan okuduğum değerleri "FormatFloat('0.00',StokHareketMIKTAR.Value)" fonksiyonu ile yuvarlayarak yazıyorum. Ayrıca 15.56 yı 18'in üzerine doğru topluyor ama neden 6.2'ye gelince saçmalıyor ? Bunu başka değerlerde başka stoklarda da yapıyor. Bu benim sizinle paylaştığım sadece 1 örnek. İşin içinden bir türlü çıkamadım. Acil yardımlarınızı rica ediyorum.
Kod: Tümünü seç
StokHareket.Open;
while Not StokHareket.Eof do
begin
StokMizan.Close;
StokMizan.SQL.Clear;
StokMizan.SQL.Add('UPDATE STOKMIZAN SET CIKANMIK= (CIKANMIK + :vCIKANMIK)');
StokMizan.SQL.Add('WHERE STOK_NO=:vSTOK_NO AND DEPO=:vDEPO');
StokMizan.Parameters.ParamByName('vSTOK_NO').value:= StokHareketSTOK_NO.Value;
StokMizan.Parameters.ParamByName('vDEPO').value:= StokHareketDEPO.Value;
StokMizan.Parameters.ParamByName('vCIKANMIK').Value:= StrToFloat(FormatFloat('0.00',StokHareketMIKTAR.Value));
StokMizan.ExecSQL;
StokMizan.Close;
StokHareket.Next;
end;