firebird deki tablolarımda düzeltme yapamıyorum

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ı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

firebird deki tablolarımda düzeltme yapamıyorum

Mesaj gönderen comfort »

Herkese iyi çalışmalar;
ben ixbexpert ile firebird üzerinde oluşturduğum tablolarımın alanlarının yapısında değişiklik yapamıyorum bana söyle bir mesaj veriyo

Kod: Tümünü seç

This operation is not defined for system tables.
unsuccessful metadata update.
New size specified for column VERGINO must be at least 20 characters.
burada yapmaya çalıştığım vergino isimli alanın büyüklüğünü 15 karakter yapmak fakat önceden 20 karakter olarak tanımlamıştım bununla beraber
yarattığım tablonun isminide değiştiremiyorum sorun ibexperttenmi kaynaklanıyor yardımcı olursanız sevinirim
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Tablonda veri olduğu için küçültmeyi reddediyor. Tablondaki verileri sil ve yeniden dene.
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Eğer sileceğiniz alan veya tablo diğer yerlerde kullanılmışsa değiştirememeniz normal . Aynı yapıda bşka bir alan/tablo oluşturun eskisini silin .
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

1-tablomda veri yok içi boş
2-tablomun herhangi bir yerle ilişkisi de yok sadece generatorle var acaba alakası olabilirmi:?:
Kullanıcı avatarı
Query
Üye
Mesajlar: 363
Kayıt: 29 Ara 2003 05:13

Mesaj gönderen Query »

oguzozturk74 yazdı:Eğer sileceğiniz alan veya tablo diğer yerlerde kullanılmışsa değiştirememeniz normal . Aynı yapıda bşka bir alan/tablo oluşturun eskisini silin .
Yapılacak en iyi şey. Yenide oluştur benimde başıma geldi bi kaç defa yenide düzenledim oldu bitti.
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

tabloda bir field düzeltmek için koca tabloyu yeniden yaratmak bana çok mantıksız geldi ben mysql kullanıcısıydım omumla hiç böyle bir sorun yaşamadım eminim firebird içinde bu geçerlidir ama yolunu bulamadık.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

benzer şeyler benim de başıma geldi.
ben o field'i komple silip bir daha baştan aynı field name'i ile tekrar ekle.
hiç bişey olmaz.
ama dediğin gibi bi field için tabloyu baştan oluşturmak mantıklı değil.
onaydin

Mesaj gönderen onaydin »

Tablo adını değiştirmek mümkün ama hakkatten çok zahmetli. Aslında bu zahmet bir defaya mahsus öncelikle bu tablo adı bilgileri sistem tablolarında tutuluyor. Mesela tablo adları RDB$RELATIONS tablosunda tutulmakta o zaman burda

Kod: Tümünü seç

update RDB$RELATIONS set RDB$RELATION_NAME ='yeni' where RDB$RELATION_NAME ='eski' 
diyerekten bildik update kodunu yazdığınızda tablo adı şipşak değişiveriyor. Lakin şöyle bi güzelliği var bu tabloya ait fieldler de RDB$RELATION_FIELDS diye bir tablo var ve orada tutuluyor ve bunların birbirlerine bağlanmalarıda maalesef bir ID ile değil direk tablonun adıyla dolayısıyla bu tabloyada müdahale etmeniz gerekiyor (nerde bu referential integrity tablo adı değişiyor fieldler kalıyor, var demekki bir bildikleri) .
Bunu trigger marifetiyle yapabiliriz. RDB$RELATIONS tablosunun update trigger ına
RDB$RELATION_FIELDS deki alanları değiştireceğimiz update kodunu yazıyoruz

Kod: Tümünü seç

set = new.RDB$RELATION_NAME where RDB$RELATION_NAME = old.RDB$RELATION_NAME
şeklinde değiştiriyor, tabi buna benzer başka tablolarda da ilişkiiler olabilir eğer varsa onlarıda bulmak gerekebilir, primary key ler de foreign key lerde olabilir mesela.
Her ne kadar uzun gözüksede bunları tespit edip bir script hazırlarsınız ve her db oluşturduğunuzda bunu bi defaya mahsus çalıştırısanız tablo adınızı değiştirebilirsiniz ya da firebird dekiler eğer hala yazmadılarsa ya şuna bi el atalım da milleti uğraştırmayalım diyebilirler.

IBExpert ücretsizde system tablolarını göremedim DBWorkbench le gezindim, system tablosu üzerinde trigger oluşturma yetkiniz vs. var (sql den oluyor).
Şahsen ben ddl i kopyalar işimi görürdüm.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

evet ustalar bize laf düşmez ama ,

acemilikten benimde bu alan değiştirme gibi sıkıntılarım olurdu ve tek tek tabloları tekrar yazardım taki ddl olayını öğrenene kadar.

DDL sini öğrenince şipşak aynı tabloyu tekrar oluşturuyorsun adını değiştirerek bile oluşturuyorsun ve diğerini siliyorsun.

aslında işi baştan sıkı tutup önce kağıt üzerinde tasarlasak bu kadar yanlış ve sıkıntı olmaz heralde.

kolay gelsin
Kullanıcı avatarı
Dark_Archon
Üye
Mesajlar: 1
Kayıt: 04 Mar 2005 04:48

Mesaj gönderen Dark_Archon »

arkadaşlar merhaba,
forumda değiştirme ile ilgili kod ararken bi yöntem buldum. standart komutları denedim (modify, change) fakat bunlar firebird de çalışmadı. ben veritabanı yöneticisi olarak iboconsole kullanıyorum. yöntem olarak şöyle birşey denedim ve çalıştı. değişiklik yapacak olduğunuz table a çift tıklayın. ekrana properties sekmesi gelecek. oradan değiştirmek istediğiniz field ın üzerine sağ tıklayın. çıkan popup menüden edit i seçin. lenght satırında değişikliğinizi yapın. ardından character i düzenleyin ve kaydedin. denedim sorun yok.
mucit
Üye
Mesajlar: 83
Kayıt: 24 Kas 2004 10:41
Konum: BURSA

Mesaj gönderen mucit »

Merhaba,

Kod: Tümünü seç

UPDATE RDB$FIELDS SET RDB$FIELD_LENGTH = 20, RDB$CHARACTER_LENGTH = 20
WHERE RDB$FIELD_NAME = (SELECT RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = 'TABLE_ADI' AND RDB$FIELD_NAME = 'FIELD_ADI');
şeklinde olması lazım.

Kolay gelsin
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
ib expertte fiedın üzerine iki kere tıkladığın zaman açılan field editöründe edit domain dediğin zaman ilgili alanda istediğin değişiklikleri yapması lazım.

domainleri kullanarak bu işlemleri daha kolay yapabilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Cevapla