bizim kullandığımız tablo ve domainlerin yanında veritabanlarınında bu tip bilgileri tutmak için kullandığı sistem tabloları ve domainleri vardır.
siz bir alan eklediğiniz zaman bu alanın özelliklerini taşıyan bir adet sistem domaini oluşturulur ve tablonun ilgili fieldi
RDB$FIELDS tablosunda bu domain ile ilişkilendirilir.
Bu tabloları ib expertte görmek için
database registration info penceresini açıp
db explorer seçeneğini seçtikten sonra
sol tarafta yer alan seçenekleri işaretleyerek görünür hale getirebilirsiniz.
mesela tablo alanlarını tanımlarken kullanılan
her integer ayrı bir system domainin oluşmasın neden olur. buda binlerce sistem domaine sahip olmanız demektir. eğer kendiniz bir domain tanımlayıp kullanırsanız bu sayıda ciddi bir azalma olur.
programın içinden böyle bir mudahale yapmak gerektiinde aşağıdakine benzer bir kod kullanıyorum.
Kod: Tümünü seç
ibqTemp.Close;
ibqTemp.SQL.Clear;
ibqTemp.SQL.Add('select RDB$FIELD_SOURCE from rdb$relation_fields db');
ibqTemp.SQL.Add('where db.rdb$field_name = '+#39+'BOLGEMAHALI'+#39);
ibqTemp.SQL.Add('and db.rdb$relation_name = '+#39+'BOLGELER'+#39);
ibqTemp.Open;
if Trim(ibqTemp.Fields[0].AsString) = 'KARAKTER_100' Then
Begin
ibSql.Close;
ibSql.SQL.Clear;
ibSql.SQL.Add('update RDB$RELATION_FIELDS set');
ibSql.SQL.Add('RDB$FIELD_SOURCE = '+#39+'KARAKTER_250'+#39);
ibSql.SQL.Add('where (RDB$FIELD_NAME = '+#39+'BOLGEMAHALI'+#39+') and');
ibSql.SQL.Add('(RDB$RELATION_NAME = '+#39+'BOLGELER'+#39+')');
try
ibSql.ExecQuery;
except
on E: Exception do
Begin
IBTR.RollbackRetaining;
HataGoster('FDB Update Error !',E);
End;
end;
IBTR.CommitRetaining;
end;
bu koda daha önceden KARAKTER_100 domaini ile ilişkilendirilmiş olan BOLGELER tablosunun BOLGEMAHALI adlı alanının tipini KARAKTER_250 domaini ile değiştiriyor.
ilgili domaini ya önceden oluşturmuş olmanız gerekir veya kullanıcıya çaktırmadan istediği özelliklere sahp bir domain oluşturup ona göre set etmeniz gerekir.