firebird numeric veya decimal alan

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

firebird numeric veya decimal alan

Mesaj gönderen selimr »

numeric 3,2 veya
decimal 5,2 şeklinde alanlar tanımlıyorum..

her ikiside 12345678,32 gibi bir sayıyı kabul ediyor bu normalmi..

yani 3,2 dediğimde uzunluk 3 virgülden sonra 2 basamak demek değilmidir.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Hemen Firebird 1.5.3 sürümünde denedim, 12345'i bile kabul etmedi. Bir yerde yanlışınız var...

Evet Numeric ile decimal Firebird'te aynı manaya gelir ve numeric(5,2)--> toplamda 5 haneli rakamları belirtir. Virgülden önce 3, virgülden sonra 2 basamak.

Kolay gelsin.
En son mussimsek tarafından 30 Ağu 2007 11:02 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

mussimsek hocam söylediklerin doğru... yani öyle olması gerekiyor.. ben firebird 2, 2.01, ve en son yeni çıkan 2.02 de denedim..

firebird i kaldırıp yeniden kurdum değişen birşey yok.. numeric veya decimal (3,2) veya (5,2) gibi tanımlamalara 12345678,33 gibi bir sayı kabul ediyor..

firebird 1.5.3 ü denemedim bu arada..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Bana pek mümkün gibi gelmiyor ama denemeden de birşey diyemiyorum. Değeri alana yazıp commit edebildiniz mi?

Mesela ibexpert gibi araçla aynı şeyi yapabiliyor musunuz?

Kolay gelsin.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

evet banada mantıklı gelmiyor..

ibexpertle verileri giriyorum kabul ediyor.. commit ediyorum..

hatta sonra lazarustan zeos la girip grid üzerinde gösteriyorum..

firebird 2 denmi kaynaklanıyor acaba.... berde firebird 1.5 ile deniycem bakalım ne olacak..
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Mesaj gönderen Lost Soul »

hocam 1.5 de denediğinizde sonucu bildirirseniz sevinirim. Sorun makinenizde mi yoksa firebirdde mi bilmem gerekiyor.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

henuz 1.5 i denemedim ama sorun makineden kaynaklanmıyor.. çünkü aynı şeyi işyerinde iki makinede ve evdeki makinede denedim.. hepsinde sonuç aynı..

1.5 i deneyince yazarım
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Aklıma takıldı, deneyim diye 1.5'u kaldırıp 2.0.2 kurdum. Şöyle bir tablo oluşturdum :

Kod: Tümünü seç

CREATE TABLE DELPHITURKIYE (
    SAYI   DECIMAL(3,2) NOT NULL,
    SAYI2  NUMERIC(4,2)
);
Netice decimal alanında bir kontrol yapmıyor, 123456 gibi bir sayı girebildim. Ama numeric'te kurala uyuyor. Fazla giremedim sayıyı, her seferinde engelledi.

Alanlarınızı numeric'e çevirirseniz sorun gidecektir.

Kolay gelsin.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

bende aynı yapıda bir tablo oluşturdum ibexpert ile (firebird 2.0.2)
ve verileri söylediğin gibi numeric alan için kontrolleri yaptı decimal için yapmadı..

ibexpert i kapatıp sonra tekrar açtım.. ve bu sefer numeric alana veri girerkende kontrol yapmadı..

yani herseferinde aynı işlemleri yapmıyor .. bir tutarsızlık var..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Ib Expertin Decimal ve Numeric Sayfası

Öncelikle bir hata mı düzeltiyim. Numeric(5,2) gibi bir ifade de ilk parametre yani 5 toplam rakam sayısını belirtiyormuş. ikinci parametre ise kuruş kısmını. Yani numeric(5,2)'de şöyle sayılar olabilir : 123,45 gibi.

Yukarda verdiğim adresten öğrendiğim kadarıyla Firebird bu bilgileri belirli uzunluklarda depoluyormuş ve bu uzunlukta olduğu sürece girilen rakamlara müsade ediyormuş.

numeric 1-4 : smallint
numeric 5-9 : integer
numeric 10-18 : int64

yani bu değerler içinde müsade ediyor. Diyelim ki numeric 5 tanımladınız, 9'a kadar müsade ediyor. Ben sadece birkaç yerde numeric kullandım ve hiçte dikkatimi çekmedi. İlla sınırlamak istiyorsanız ne yapılabilir bilmiyorum, araştırıyorum konuyu.

Kolay gelsin.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

bu örnekten yola çıkarak şöyle bir tablo tanımladım..

Kod: Tümünü seç

CREATE TABLE TABLO1 (
       NUMALANA_4_2    NUMERIC(6,2),
       NUMALANB_9_2    NUMERIC(11,2)
);
şimdi ben burda verdiğiniz üst sınırlara göre bir tablo tanımladım..

yani tam kısmı 4 virgülden sonraki kısım 2 olması için (numeric(6,2)) şeklinde tanımladım.. diğerinide aynı mantıkla...

fakat burdada sınırların bir anlamı kalmadı çünkü aşağıdaki değerleri girebildim..

NUMALANA_4_2 NUMALANB_9_2
--------------------------------------------------------------------------
123.456,00 .................. 123.456.789.123,32
1.234.567,00 .................. 12.345.678.965.432,00
12.345.678,52 .................. 123.456.789.456.789,00


hiç bir kontrol yapmadı.. iyice kafam karıştı...

ya hocam yoksa şöylemi yapıyor.. siz decimal de yazsanız; numeric de tanımlasanız ben bunu double precision olarak dikkate alıyorum..
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

check ike kısıtlama koyabiliyorsunuz. Mesela SAYI2 kolonu 1000'den büyük olamasın, yani 0 ile 1000 arasında değer alsın (3 basamak) istiyorsanız :

ALTER TABLE DELPHITURKIYE ADD check (sayi2 < 1000);

bu şekilde bir check ile işinizi görebilirsiniz.

Kolay gelsin.
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

doğru hocam o şekilde yapılabilir..

teşekkürler..
Cevapla