Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird Ondalık Sorunu
#1
Değerli arkadaşlar merhaba,

Firebird veri tabanında Decimal (12,3) tipinde kayıtlı bir alana örneğin 3 rakamını kaydettiğimde 3,000 olarak kaydediyor. Ancak bu alanı delphide dbgridde listelediğim zaman sadece 3 olarak görünüyor. Oysaki ben dbgridde de 3,000 olarak görünmesini istiyorum. Bunun için ne yapabilirim?

Teşekkürler...
Cevapla
#2
Şöyle bir yapı işinizi görür.

Sorgunuz temsili olarak LQuery olsun. Bunu TFloatField olarak cast edip Display formatı olarak da aşağıdaki şekilde görüntülenmesini sağlıyorsunuz. 
Bu satırı sogunuzu Active := True dedikten sonra Field'lar belirince yapabilirsiniz.   

* Fields[3] ->  0,1,2,3. field anlamına geldiğini anlamışsınızdır. FieldByName('FieldAdi') şeklinde de alan adınızı belirtebilirsiniz.

    TFloatField( LQuery.Fields[3] ).DisplayFormat := '#####0.000';
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
Değerli Hocam kod çalışmadı. Access violation hatası verdi. 

Kodlar şu şekilde;

     with DataModule1.IBQuery1 do
     begin
        Database := DataModule1.IBDatabase1 ;
        SQL.Clear ;
        SQL.Add('Select * from TBL_YEM_BITKILERI ') ;
        SQL.Add('Where TCNO = : PTCNO ') ;
        ParamByName('PTCNO').AsString := AktifKisiTCNo.Text ;
        SQL.Add('Order By ADA,PARSEL,EKILEN_URUN COLLATE PXW_TURK, TAKSIT_NO') ;
        Open ;

        Active := True ;

        TFloatField( Fields[6] ).DisplayFormat := '#####0.000';

        DataModule1.Datasource1.DataSet := DataModule1.IBQuery1;
        DBGrid1.DataSource := DataModule1.Datasource1 ;
     end;
Cevapla
#4
Query de field leri açıp, ilgili field in DisplayFormat kısmına '#,##0' yazmanız yeterli olacaktır.
WWW
Cevapla
#5
Bu olayı db den ayarliyamiyormuyuz?. Ayni problemin bi farklisi bende de var. 11.99 gibi bir rakam girince 11.99983838393 gibi saçma sapan bir rakam çıkıyor ortaya.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#6
(19-03-2021, Saat: 18:38)mcuyan Adlı Kullanıcıdan Alıntı: Bu olayı db den ayarliyamiyormuyuz?. Ayni problemin bi farklisi bende de var. 11.99 gibi bir rakam girince 11.99983838393 gibi saçma sapan bir rakam çıkıyor ortaya.

Merhaba bu sonuç delphi tarafında mı yoksa Firebird tarafında mı?
Firebird tarafı için Alan tipini DECİMAL tanımladıktan sonra Size(Tam sayı kısmı) ve Scale(Ondalık kısmı) alanlarına girdiğiniz değerler doğrultusunda kayıtlarınız yapılacaktır. Alttaki resimde ben değeri 1 girip kayıt yaptığımda sonuç "1,0000" olacaktır. ID tarafından çağırdığınızda da aynı şekilde geri dönecektir.
Sonucu ekranda göstermeden önce @esistem söylediği şekilde yaparsanız sorun yaşamazsınız.

   
Cevapla
#7
(19-03-2021, Saat: 17:59)esistem Adlı Kullanıcıdan Alıntı: Query de field leri açıp, ilgili field in DisplayFormat kısmına '#,##0' yazmanız yeterli olacaktır.

Hocam IBQuery'de DisplayFormat diye bir alan bulamadım. Nerededir bu alan?

Bu arada baya eski ama Delphi 7 kullanıyorum. Smile

(18-03-2021, Saat: 23:36)mrmarman Adlı Kullanıcıdan Alıntı: Şöyle bir yapı işinizi görür.

Sorgunuz temsili olarak LQuery olsun. Bunu TFloatField olarak cast edip Display formatı olarak da aşağıdaki şekilde görüntülenmesini sağlıyorsunuz. 
Bu satırı sogunuzu Active := True dedikten sonra Field'lar belirince yapabilirsiniz.   

* Fields[3] ->  0,1,2,3. field anlamına geldiğini anlamışsınızdır. FieldByName('FieldAdi') şeklinde de alan adınızı belirtebilirsiniz.

    TFloatField( LQuery.Fields[3] ).DisplayFormat := '#####0.000';

Hocam bu kodu çalıştırdım. Sorun benden kaynaklanmış. Özür dilerim. Sorunu yazayım.

Yukarıda Fields[...] alanında belirttiğimiz rakam alanın tablodaki sırası olmalıymış.

Ben DBGrid'i çift tıklayınca açılan "Editing DBGrid Columns " tan tabloda göstermek istediğim alanları ayarlamıştım. Ben alanın buradaki sırasını yazdığım için hata veriyormuş.
Cevapla
#8
Ben bu tür format ayarlarını bir tabloya ekledim, bu tablodan aldığım verile query nin before unda aktif ettim.
Böylece kullanıcının  formatı kendi istediğine göre değişmesini sağlandı.

[img]Ayarlar.jpg[/img]

procedure TDMBanka.BankaislemIBQBeforeOpen(DataSet: TDataSet);
begin
       DMSabit.AyarlarIBQ.Locate('AYARKOD','4',[]);
       BankaislemIBQTEDIYE.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQTAHSILAT.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQBAKIYE.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQH_BAKIYE.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQD_TEDIYE.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQD_TAHSILAT.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQCARIKURU.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
       BankaislemIBQISLEMKURU.DisplayFormat := DMSabit.AyarlarIBQFORMAT.AsString;
end;
Cevapla
#9
(19-03-2021, Saat: 18:49)ozcanm Adlı Kullanıcıdan Alıntı:
(19-03-2021, Saat: 18:38)mcuyan Adlı Kullanıcıdan Alıntı: Bu olayı db den ayarliyamiyormuyuz?. Ayni problemin bi farklisi bende de var. 11.99 gibi bir rakam girince 11.99983838393 gibi saçma sapan bir rakam çıkıyor ortaya.

Merhaba bu sonuç delphi tarafında mı yoksa Firebird tarafında mı?
Firebird tarafı için Alan tipini DECİMAL tanımladıktan sonra Size(Tam sayı kısmı) ve Scale(Ondalık kısmı) alanlarına girdiğiniz değerler doğrultusunda kayıtlarınız yapılacaktır. Alttaki resimde ben değeri 1 girip kayıt yaptığımda sonuç "1,0000" olacaktır. ID tarafından çağırdığınızda da aynı şekilde geri dönecektir.
Sonucu ekranda göstermeden önce @esistem söylediği şekilde yaparsanız sorun yaşamazsınız.

@ozcanm Bey. Öncelikle cevap için teşekkür ederim. Ben uygulamam da Fiyat ile ilgili alanları Float yaptım. MAlesef ki Decimal yapmamıştım. Float yapınca 1.99 gibi girdiğim bir fiyat abuk subuk 1.9989398398 gibi abuk subuk bir rakama çeviriyor. Decimal kısmını bilmiyordum. Alanı float yaptığım için Delphi tarafında ilgili kısmın field tipini Currency yaparak bu işi hallediyordum. Fakat sizin dediğiniz gibi yapsaydım sanırım hiç durrency olayı ile uğraşmayacaktım.

Peki şimdi fiyat ile ilgili alanlarımı Float dan decimal e çevirdiğim de sanırım delphi taradındaki tüm alanları yendien eklemem (Düzenlemem) gerekecektir ki müthiş bir işçilik harcayak diye tahmin ediyorum.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#10
@mcuyan
Yani nasıl bir yapı kurduğunuzu en iyi siz biliyorsunuz, o yüzden ne kadar işçilik çıkar bilemeyiz  Shy
Uygulamaları geliştirirken bir ayarlar penceresi tasarlayıp(Windows Bölgesel Ayarlar ) ve tüm işlemlerinizde burayı referans aldırsanız aslınca pek bir işçilik olmayacaktır boş ise default değerler dolu ise girilen değerlere göre işlem yaptırılabilir.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  firebird bağlantı hatası. Kamuran Alpkaya 17 19.146 06-08-2025, Saat: 14:20
Son Yorum: mcuyan
  FIREBIRD SIRALAMA Kral 10 1.934 15-10-2024, Saat: 19:04
Son Yorum: Kral
  Firebird bağlantı kopmaları (ZeosLib) boreas 0 773 12-06-2024, Saat: 16:08
Son Yorum: boreas
  Firebird Database Create Doğru mu? Altıner 2 1.311 02-05-2024, Saat: 11:00
Son Yorum: hi_selamlar
  pardusda dbeaver ıle fırebırd kullanımı hakkında sadikacar60 8 2.344 29-02-2024, Saat: 17:50
Son Yorum: Hayati



Konuyu Okuyanlar: 1 Ziyaretçi