Table deki field type lerini almak!!

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ı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Table deki field type lerini almak!!

Mesaj gönderen Nick_ »

S.a arkadaşlar delphi ile db ye bağlanıp taloların ve fieldlerin isimlerini alabiliyorum ancak bana field type leri lazım.. bunu nasıl yaparım.. ( örn. kısaca IBDatabase1.GetFieldTypeNames(); gibi bisi)
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Table deki field type lerini almak!!

Mesaj gönderen aslangeri »

s.a.
query ile tabloyu open ettiğin zaman querynin
fields özelliğine alanlar yüklenir.
tüm field lar için döngü kurup fields.fieldtype , datatype vs ulaşabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
serkan
Üye
Mesajlar: 666
Kayıt: 10 Tem 2003 12:08
Konum: bursa

Re: Table deki field type lerini almak!!

Mesaj gönderen serkan »

firebird sistem tablolarından tablo isimleirini veya field isimlerini alıyorsann eğer, firebird alan tiplerini integer olarak tutuyor sen bir calculated field tanımlayarak bu integer değerlerin bilinen tipleri yazabilirsin.


şöyleki:

Kod: Tümünü seç

if alanlarxRDBFIELD_TYPE.Text='8' then
alanlarxALANTIPI.Text:='INTEGER';
if alanlarxRDBFIELD_TYPE.Text='12' then
alanlarxALANTIPI.Text:='DATE';
if alanlarxRDBFIELD_TYPE.Text='37' then
alanlarxALANTIPI.Text:='VARCHAR';
if alanlarxRDBFIELD_TYPE.Text='27' then
alanlarxALANTIPI.Text:='DOUBLE PRECISION';
if alanlarxRDBFIELD_TYPE.Text='7' then
alanlarxALANTIPI.Text:='SMALLINT';
if alanlarxRDBFIELD_TYPE.Text='10' then
alanlarxALANTIPI.Text:='FLOAT';
if alanlarxRDBFIELD_TYPE.Text='13' then
alanlarxALANTIPI.Text:='TIME';
if alanlarxRDBFIELD_TYPE.Text='35' then
alanlarxALANTIPI.Text:='TIMESTAMP';
diğer alan tiplerinini integer cinsinden değerlerini deneme yanılma yolu ile bulabilirsin.
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Re: Table deki field type lerini almak!!

Mesaj gönderen Nick_ »

s.a.
query ile tabloyu open ettiğin zaman querynin
fields özelliğine alanlar yüklenir.
tüm field lar için döngü kurup fields.fieldtype , datatype vs ulaşabilirsin.
kolay gelsin.


fields.fieldtype nasıl oluyorkı?
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Re: Table deki field type lerini almak!!

Mesaj gönderen Nick_ »

Kod: Tümünü seç

IBQuery2.SQL.Text:=    // a:=#39
    '  SELECT r.RDB$FIELD_NAME AS field_name, r.RDB$NULL_FLAG AS field_not_null_constraint, '+
    '  f.RDB$FIELD_LENGTH AS field_length,'+
    '  CASE f.RDB$FIELD_TYPE  '+
    '  WHEN 261 THEN  '+a+ 'BLOB'     +a+
    '  WHEN 14  THEN  '+a+ 'CHAR'     +a+
    '  WHEN 40  THEN  '+a+ 'CSTRING'  +a+
    '  WHEN 11  THEN  '+a+ 'D_FLOAT'  +a+
    '  WHEN 27  THEN  '+a+ 'DOUBLE'   +a+
    '  WHEN 10  THEN  '+a+ 'FLOAT'    +a+
    '  WHEN 16  THEN  '+a+ 'INT64'    +a+
    '  WHEN 8   THEN  '+a+ 'INTEGER'  +a+
    '  WHEN 9   THEN  '+a+ 'QUAD'     +a+
    '  WHEN 7   THEN  '+a+ 'SMALLINT' +a+
    '  WHEN 12  THEN  '+a+ 'DATE'     +a+
    '  WHEN 13  THEN  '+a+ 'TIME'     +a+
    '  WHEN 35  THEN  '+a+ 'TIMESTAMP'+a+
    '  WHEN 37  THEN  '+a+ 'VARCHAR'  +a+
    '  ELSE '+a+'UNKNOWN'+a+ '  END AS field_type, '+
    '  coll.RDB$COLLATION_NAME AS field_collation, '+
    '  cset.RDB$CHARACTER_SET_NAME AS field_charset  '+
    '  FROM RDB$RELATION_FIELDS r '+
    '  LEFT JOIN RDB$FIELDS f ON r.RDB$FIELD_SOURCE = f.RDB$FIELD_NAME '+
    '  LEFT JOIN RDB$COLLATIONS coll ON r.RDB$COLLATION_ID = coll.RDB$COLLATION_ID '+
    '  AND f.RDB$CHARACTER_SET_ID = coll.RDB$CHARACTER_SET_ID '+
    '  LEFT JOIN RDB$CHARACTER_SETS cset ON f.RDB$CHARACTER_SET_ID = cset.RDB$CHARACTER_SET_ID '+
    '  WHERE r.RDB$RELATION_NAME='+a+ ListBox1.Items[ListBox1.itemindex] +a+' ORDER BY r.RDB$FIELD_POSITION';
    IBQuery2.Open;        // ListBox1 de Tablo isimleri..

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
IBQuery2.First;
 while not IBQuery2.Eof do
  begin
   Memo3.Lines.Add(IBQuery2FIELD_TYPE.AsString);
   IBQuery2.Next;
  end;
end;
Sorunu bu şekilde hallettim gibi.. farklı bı yontemı olanlar varsa yazarsa sevınırım..
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Table deki field type lerini almak!!

Mesaj gönderen aslangeri »

fieldtype değil fieldkind olacak.
senin istediğin datatype oda tfieldtype tipinde.
yani fields.datatype='ftString' şeklinde kontrol yapman lazım.

siz sistem tablolarından çekerek fb deki tipini yazıyorsunuz ben delphideki karşılığından bahsediyorum.
herhangi bir tabloyu open ettiğiniz zaman dataset in fields alanına tablodaki alanlar eklenir. alan listesini döngüye sokarak tablodaki alanların tiplerini bulabilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Re: Table deki field type lerini almak!!

Mesaj gönderen Nick_ »

tesekkurler @aslangeri dataset kullanmadım

yukardakı sql sorgusunu gondermeden once

Kod: Tümünü seç

IBDatabase1.GetFieldNames(ListBox1.Items[ListBox1.ItemIndex], ListBox2.Items);
kullanmıstım. yanı lıstbox a field ısımlerını almıstım.. ancak GetFieldNames den gelen sonuc alfabetik sıraya gore gelıyor.. ben 1. listbox a tabloları 2. listbox a secılen tablonun fıeldlarını 3. lıstbox a ıse fieldların type lerını yazmak ıstıyorum.. GetFieldNames den gelen sonuc alfabetik sırada oldugu ıcın listbox3 te ID alanını Varchar2 olarak gosterıyor bunu nasıl halelderım..
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Kullanıcı avatarı
Nick_
Üye
Mesajlar: 122
Kayıt: 01 Eki 2007 09:28
Konum: Konya

Re: Table deki field type lerini almak!! [ÇÖZÜLDÜ]

Mesaj gönderen Nick_ »

Kod: Tümünü seç

Memo2.Text:='';
IBQuery2.First;
 while not IBQuery2.Eof do
  begin
    Memo2.Lines.Add(trim(IBQuery2FIELD_NAME.AsString));
    IBQuery2.Next;
  end;
dıyerek field isimlerinide dogru bı sekılde almıs bulunmaktayım.. fazla sql bılgım olmadıgı ıcın kafam baya karısmıstı.. cevap gonderen arkadaslara tesekkurler
Bilmemek ayıp değil öğrenmek isteyene öğretmemek ayıp:)
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Table deki field type lerini almak!!

Mesaj gönderen Kuri_YJ »

Selamlar,

SQL 2003 Standardlarında INFORMATION_SCHEMA isimli bir nesne mevcut ve buradan DB Hakkında istediğiniz herhangi bir şeyin bilgisini çekebiliyorsunuz. Örneğin SELECT * FROM INFOTMATION_SCHEMA.TABLES ya da SELECT * FROM INFOTMATION_SCHEMA.VIEWS vs.

Ancak Firebird'de henüz bu sistem desteklenmiyor, onun yerine RDB$ tabloları mevcut bunun hakkında detaylı örnekleri aşağıdaki linkten edinebilirsiniz.

http://www.alberton.info/firebird_sql_meta_info.html

Yukarıdaki linkte, tablolar, viewler, constraintler, indexler vs. var oğlu var.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla