"size is too small for data"

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

"size is too small for data"

Mesaj gönderen ASE »

Arkadaşlar
Yapıları ve alanları aynı bir tablodan diğerine veri aktarıyorum.
Ama tablolardan bir tanesinde

Kod: Tümünü seç

Size Mismatch - Field KIMLIK size is too small for data
şeklinde bir hata alıyorum. Bütün denemelere rağmane sebebini bulamadım.
Forumda kimsenin başına gelmemiş anlaşılan. Google de aradım bi iki sonuç çıktı ama çözüm yok.
Herkese iyi akşamlar....
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

İlk önce hata ile ilgili detaylı açıklama yapsan iyi olurdu (KIMLIK alanının tipi V.T. sürümün vs). KIMLIK alanının özelliği bir tarafta not null olabilir. Sen boş bir alan kaydetmeye çalışıyo olabilirsin. Hata mesajında gereğinden küçük data dediğine göre aklıma gelen bu.
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

@hbahadir
Problem alan tipiyle ya da not null olmasıyla ilgili değil. Birden fazla alanda aynı hatayı alıyorum. Zaten dediğim gibi aktarma yaptığım tabloların yapısı aynı. Veryiyi birinden alıp diğerine aktarıyorum alan değerlerini eşitleyerek.
VT sürümü Firebird 2.0
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

kararlı sürüm olan 1.5.2 yi kullanmanızı tavsiye ederim (hatta backup ve restore ile vt yi 1.5.2 ye çevirdikten sonra aynı işlemi yapın bence)
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Benimde aklıma gelen o şu an için...
Sağol ilgilendiğin için
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

Bu işlemini nasıl, ne şekilde yaptığını açıklamamışsın.
atamayı nasıl yapıyorsun, kaynak tablon nerden geliyor vs..
büyük ihtimalle karakter seti uyumsuzluğundan kaynaklanan byte boy yetersizliği durumu var. ama verdiğin bilgiler yetersiz.
FB 2.0 kullanan birsürü insan var, kararsız oldugu söylenemez. ufak tefek
buglar tüm ürünlerin releaselerinde bile vardır.
Firebird Foundation Member #208
http://www.firebirdsql.org
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

@Terminator
Aktarma kodu aşağıda. Bu kodu bi çok defa kullandım ama ilk kez böyle bişey geliyor başıma. Karakter seti aklıma geldi ve kontrol ettim ama iki tabloda WIN1254 ve TURKISH_CHARSET ayarlı. Ve atblolarda yaklaşık 5 -10 bin kayıt olmasına rağmen sadece 1 - 2 kayıtta bu problem çıkıyor. Problem çıkaran alandaki veriler başka kayıtlarda da var.
mesle bu kodda

Kod: Tümünü seç

Size Mismatch - Field BELGENO size is too small for data
gibi bir hata veriyor. Benzer tablolarda benzer hatalar var. Alandaki veriyi silince aktarma devam ediyor.
Anlayabilmiş değilim ama hayırlısı.
İlgilendiğin için sağol....

Kod: Tümünü seç

procedure TForm1.Button5Click(Sender: TObject);
begin
  IB_belgeaktar.Open;
  IBeskibelge.Open;
  IBeskibelge.FetchAll;
  IBeskibelge.First;
  Gauge1.MaxValue := IBeskibelge.RecordCount;
  try
    while not IBeskibelge.Eof do
    begin
      IB_belgeaktar.edit;
      IB_belgeaktar.Append;
      IB_BelgeAktarBELGENO.value := IBeskibelgeBELGENO.value;
      IB_BelgeAktarBELGEADI.value := IBeskibelgeBELGEADI.value;
      IB_BelgeAktarTARIHI.value := IBeskibelgeTARIHI.value;
      IB_BelgeAktarSAATI.value := IBeskibelgeSAATI.value;
      IB_BelgeAktarCH_ID.value := IBeskibelgeCH_ID.value;
      IB_BelgeAktarBELGEYIALAN.value := IBeskibelgeBELGEYIALAN.value;
      IBeskibelge.Next;
      Gauge1.Progress := Gauge1.Progress + 1;
    end;
  finally
    IB_BelgeAktar.Post;
    IB_belgeaktar.Transaction.CommitRetaining;
      IB_belgeaktar.close;
    IBeskibelge.Close;
   end;
end;
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

ASE yazdı:

Kod: Tümünü seç

Size Mismatch - Field BELGENO size is too small for data
BELGENO alanı veri için küçük diyor burda. BELGENO alanının türü ve boyutu ne? Hatayı verdiği anda BELGENO alanına yazmaya çalıştığın veri ne?

Misal varchar ise ve boyutu 8 karakter ise ve sen 9 karakterlik bir veri girmeye çalışıyor olabilirsin.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Alan VARCHAR ve 50 karakter uzunluğunda. Veri ise 10-15 karakter uzunluğunda. Yani aynı veriyi üst satırda sorunsuz girerken bazı kayıtlarda böyle problem çıkardı.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Kod: Tümünü seç

Length
Fonksiyonu ile bi boyuna bakar mısın? Belki sonunda boşluklar vardır...
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Evet dediğin yöntemle baktım ve uzunluk 18.
Yani problem devam ediyor.

Hayırlı akşamlar..
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Kullanıcı avatarı
hdayi
Kıdemli Üye
Mesajlar: 1284
Kayıt: 29 Oca 2004 01:53
Konum: Erciyes'in eteklerinden.

Mesaj gönderen hdayi »

Google'da arama yapınca 4-5 tane kadar sonuç çıkıyor hiç biri de ingilizce değil. Şu dil ayarlarını kurcalasan biraz? sanki ingilizce dışındaki dillerde yapıyor gibi.
Bişnev in ney çün hikâyet mîküned
Ez cüdâyîhâ şikâyet mîküned
Resim
Kullanıcı avatarı
Terminator
Üye
Mesajlar: 313
Kayıt: 13 Ara 2005 01:45
Konum: İzmir, ama Aydın Efesi!

Mesaj gönderen Terminator »

Aktarma programından pek bişey anlamadım.
yani eski versiyon veritabanına nasıl eriştin ve yenisine nasıl belli değil.
FB2 eski versiyon dosya açmaz, eski FB ile de FB2.0 dosyasını açamazsın.
yani senin bu aktarmayı yapabilmen için aynı anda hem FB2 hem FB1.5x
çalıştırıyor falan olman lazım.. ortada bir karışıklı var mı? client libler vs.?
biz FB 1.5.x dosyalarının backupını alıp FB2.0 ile restore edebiliyoruz.
bu da bir aktarma işlemidir ve Türkçe karakter setleri kullanıyor.

FB2.0 da dil kütüphaneleri yenilendi, artık IBM e ait dll libraryler kullanılıyor. kuruluşunda, bunlarda bir eksik varsa ondan da olabilir.
Firebird Foundation Member #208
http://www.firebirdsql.org
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Öncelikle gönderdiğin kodda bi anormallik var.

Önce Edit ediyorsun peşinden Append, Post etmeden bidaha aynı şeyler.
Gidip en sonunda Post ediyorsun.
Gerçi sonuçta çalışır ama eğer yazdığın diğer kodlar da bu şekildeyse benim aklıma direk basit bir yazılım hatası yaptığın geliyor.

Birkaç yöntem izlemeni öneririm:

1. Veritabanı içinde farklı isimde fakat herşeyi ile aynı yeni bir Tablo Create et. Eski tablonun adını BELGE, yeni tablonun adını BELGE_2 varsayarsak; "INSERT INTO BELGE_2 SELECT * FROM BELGE" diyerek veritabanı yönünde hatanın olup olmadığını test et. Büyük bir ihtimalle hata olmayacaktır.

2. Her iki tabloyu farklı IB komponentleri ile yeniden tasarımla; size, type ve diğer özelliklerini kıyasla ve kodu yeniden test et.

3. Aynı şekilde başka komponentlerle örneğin dbExpress komponentleri ile test et.

Bir de eğer varsa kullandığın Tabloların ve Field'ların Event'lerini kontrol et.

İyi çalışmalar.
ASE
Kıdemli Üye
Mesajlar: 518
Kayıt: 28 Ağu 2003 03:17
Konum: samsun
İletişim:

Mesaj gönderen ASE »

Arkadaşlar merhaba. Babamın vefatı dolayısıyla 10 gün kadar uzak kaldım ortamdan.

@Hakan Can:
Kodda anormallik var doğru çünkü post yanlış yerde duruyor. Normalde

Kod: Tümünü seç

 IB_BelgeAktar.Post;
    IBeskibelge.Next;
      Gauge1.Progress := Gauge1.Progress + 1;
    end;
  finally
şeklinde. Denemelerimden birisini göndermişim. Ama iki kod arasında aslında işlev açısından bir fark yok. Buraya gönderdiğim sadece en sonunda toptan post ediyor.

Kod: Tümünü seç

INSERT INTO BELGE_2 SELECT * FROM BELGE
şeklinde aktarma yapmam mümkün değil çünkü iki versiyon arasında tablo yapılarında fark var. Bu yüzden bu yöntemle aktarmak zorundayım.

Farklı komponentlerle denemek aklıma gelmemişti. Birde IBO ile deneyim elimde o var çünkü.

@Terminator:

Çok sağol. Gerçekten kafa yordun meselenin üstüne. FB2 kendinden önceki versiyonların veritabanlarını sorunsuz açıyor ve bütün işlemleri yapabiliyor. Yani aynı anda iki versiyonuda çalıştırmak gerekmiyor.

Backup restore ile aktarmam mümkün değil dediğim gibi tabllo yapılarında farklıklar var ve tablodaki bütün alanları kullanmıyorum.

Herkese yardımlarından dolayı teşekkür ediyorum. Bu konu bi şekilde çözüme kavuşur ve ben burda sonucu yazarım .

Herkese kolay gelsin.
Allah'ım!...
Yol boyunca bırakma elimi...
Düşerim sonra...


ASE YAZILIM
Cevapla