Daha öncede gündeme getirmiştim fakat tam bir sonuç alamadığım bir problemim devam ediyor, yardımlarınızı rica ediyorum.
Delphi 10.2 ve ADO bağlantı ile SQLEXPRESS kullanıyorum.
Sayısal alanlarda "Numeric" alan tipini kullanmak istiyorum fakat yaşadığım problemlerden dolayı mecburen "Float" ala tipini kullanmak zorunda kaldım. Bu problemleri aşağıda anlatmaya çalıştım, yardımlarınızı rica ediyorum.
Tabloda "Numeric" alan tipi seçersem ve 0.0217885 sayısını uygulamamdan tabloya kaydedersem eğer 0.02179 olarak kaydediyor ve ondalık kısmı yuvarlıyor. Tabloda alan tipi "Numeric(28,10)" olarak tanımlıdır. Aynı değeri tabloya elimle girersem eğer hiç bir problem olmuyor. Bu problem ADO ile ilgili olabilir mi ? Eğer öyle ise bir çözümü var mıdır ?
Forumda daha önce sorduğumda "ertank" arkadaşımız yuvarlamadan kaydetmesi için aşağıda ki gibi (UPDATE kod bloğundaki gibi) bir yöntem kullanmamı önermişti. Kaydederken "DataType" belirtmemi önermişti. Bende deneme yaptım bu yöntemi ve arkadaşımızın dediği gibi gerçekten sayısı tabloya olduğu gibi doğru bir şekilde yuvarlamadan kaydetti. Bu denemede ben tabloya bir değişken tanımlayarak o değişkenin değerini kaydettim. Bu çalıştı.
Fakat, Aşağıda kod blokta görüldüğü şekilde bir tabloda ki numeric tipinde ki "FIYAT" alanına başka bir tablodaki yine numeric tipindeki "FIYAT" alanını aktarmak istediğimde derlerken aşağıda görülen hatayı veriyor. Stok tablosundaki "FIYAT" analının tipide "Numeric", "DM1.ST_LISTE" tablosundaki "FIYAT" alanının tipide "Numeric" olmasına rağmen bu hatayı niçin veriyor olabilir ?
UPDATE:
Kod: Tümünü seç
DM1.ST_STOK.Close;
DM1.ST_STOK.SQL.CLEAR;
DM1.ST_STOK.SQL.Add('UPDATE STOK SET FIYAT= :vFIYAT');
DM1.ST_STOK.SQL.Add('WHERE STOK_NO= :vSTOK_NO');
DM1.ST_STOK.Parameters.ParamByName('vSTOK_NO').value:= vSTOK_NO;
DM1.ST_STOK.Parameters.ParamByName('vFIYAT').DataType:= ftFloat;
DM1.ST_STOK.Parameters.ParamByName('vFIYAT').Value:= DM1.ST_LISTEFIYAT.Value;
DM1.ST_STOK.ExecSQL;
Kod: Tümünü seç
[dcc32 Error] U_LISTE_BRW.pas(1492): E2010 Incompatible types: 'Variant' and 'TBcd'
Bu problemi aşamadığım için mecburen sayısal alanlar için alan tipi olarak "Float" seçmek zorunda kaldım. Bugüne kadar iyi kötü geldik fakat şimdide "Float" alan tipinde bir problem çıktı karşıma.
0.000001 sayısını uygulamamdan tabloya kaydedince tabloda değeri "1E-06" şeklinde gösteriyor. Aynı değeri tabloya elimle girincede bir şey değişmiyor yine "1E-06" şeklinde gösteriyor. Alan değerini database'de göremiyorum fakat uygulama ekranında doğru olarak görüyorum. İlginç olan aynı ondalık basamak sayısına sahip farklı sayılarda tabloda değer doğru olarak gözüküyor. Örneğin 6.525232 değerini uygulamadan kaydedip database de doğru olarak görebiliyorum. "1E-06" olarak tabloda durduğu için bu alanı uygulamada bir hesaplamada kullanmak istediğim zaman kullanamıyorum. Değeri görmüyor hesaplamada. Böylece "Float" alan tipini serüveninin de sonuna gelmiş oldum. Doğrudan database'de de bu rakamı girince aynı problemi gördüğüm için bu problemin ADO ile bir ilgili olduğunu düşünmüyorum. Sebebi ne olabilir ? Bir çözümü var mıdır ?
SQL ve ADO kullanan arkadaşlarım siz sayısal alanlar için "Numeric" alan tipini nasıl kullanıyorsunuz ? Sizler virgülden sonraki ondalık basamakları nasıl kaydedebiliyorsunuz, ben neden kaydedemiyorum, bir yerde eksik bir şeyler mi var ? Bir ayar mı yapılması gerekiyor ? Bunu gerçekten çok merak ediyorum. Çoğunluğun kullandığı SQL ve ADO ile hiç bir sorun yaşanmadan bu sayısal işlemler yapılabilirken ben neden "Numeric" alan tipini kullanamıyorum, veya "Float" alan tipinde bu saçma problemi neden yaşıyorum. Ben sayısal alanlarda "Float" yerine "Numeric" alan tipini kullanmak istiyorum aslında fakat problemlerden dolayı kullanamıyorum. Ustalarımızın yardım ve önerilerini rica ediyorum.