- Dialect 1'e göre olan SQL kodunu Temrin Fonksiyonuna işledim.
Tabloya göre alanların tiplerini doğru getiriyor...
Kod: Tümünü seç
Function FieldDetayi2(TabloAdi, AlanAdi:String):String;
Var
Sayac : Integer;
begin
with IBQuery2 do
begin
Close;
Database := IBDatabase1;
SQL.Clear;
SQL.Add('/* Dialect 1 için tablo alanları bilgisi */ ');
SQL.Add('SELECT b.RDB$FIELD_NAME, c.RDB$FIELD_TYPE, c.RDB$FIELD_SUB_TYPE, b.RDB$FIELD_ID,');
SQL.Add(' c.RDB$FIELD_LENGTH, c.RDB$FIELD_SCALE, ');
SQL.Add('case ');
SQL.Add(' when c.RDB$FIELD_TYPE = 07 then /* SMALLINT */ ');
SQL.Add(' case ');
SQL.Add(' when (c.RDB$FIELD_SUB_TYPE = 0 or c.RDB$FIELD_SUB_TYPE is null) then ');
SQL.Add(' case when c.RDB$FIELD_SCALE = 0 then ''SMALLINT'' ');
SQL.Add(' else ''NUMERIC'' ');
SQL.Add(' end ');
SQL.Add(' when c.RDB$FIELD_SUB_TYPE = 1 then ''NUMERIC'' ');
SQL.Add(' when c.RDB$FIELD_SUB_TYPE = 2 then ''DECIMAL'' ');
SQL.Add(' end ');
SQL.Add(' when c.RDB$FIELD_TYPE = 08 then /* INTEGER */ ');
SQL.Add(' case ');
SQL.Add(' when (c.RDB$FIELD_SUB_TYPE = 0 or c.RDB$FIELD_SUB_TYPE is null) then ');
SQL.Add(' case when c.RDB$FIELD_SCALE = 0 then ''INTEGER'' ');
SQL.Add(' else ''NUMERIC'' ');
SQL.Add(' end ');
SQL.Add(' when c.RDB$FIELD_SUB_TYPE = 1 then ''NUMERIC'' ');
SQL.Add(' when c.RDB$FIELD_SUB_TYPE = 2 then ''DECIMAL'' ');
SQL.Add(' end ');
SQL.Add(' when c.RDB$FIELD_TYPE = 09 then ''QUAD'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 10 then ''FLOAT'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 11 then ''D_FLOAT'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 13 then ''TIME'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 14 then ''CHAR'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 27 then /* DOUBLE PRECISION */ ');
SQL.Add(' case ');
SQL.Add(' when (c.RDB$FIELD_SUB_TYPE = 0 or c.RDB$FIELD_SUB_TYPE is null) then ');
SQL.Add(' case when c.RDB$FIELD_SCALE = 0 then ''DOUBLE PRECISION'' ');
SQL.Add(' else ''NUMERIC'' ');
SQL.Add(' end ');
SQL.Add(' when c.RDB$FIELD_SUB_TYPE = 1 then ''NUMERIC'' ');
SQL.Add(' when c.RDB$FIELD_SUB_TYPE = 2 then ''DECIMAL'' ');
SQL.Add(' end ');
SQL.Add(' when c.RDB$FIELD_TYPE = 35 then ''DATE'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 37 then ''VARCHAR'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 40 then ''CSTRING'' ');
SQL.Add(' when c.RDB$FIELD_TYPE = 261 then ''BLOB'' ');
SQL.Add('end ');
SQL.Add('FROM RDB$RELATIONS a ');
SQL.Add('INNER JOIN RDB$RELATION_FIELDS b ');
SQL.Add('ON a.RDB$RELATION_NAME = b.RDB$RELATION_NAME ');
SQL.Add('INNER JOIN RDB$FIELDS c ');
SQL.Add('ON b.RDB$FIELD_SOURCE = c.RDB$FIELD_NAME ');
SQL.Add('INNER JOIN RDB$TYPES d ');
SQL.Add('ON c.RDB$FIELD_TYPE = d.RDB$TYPE ');
SQL.Add('WHERE a.RDB$SYSTEM_FLAG = 0 ');
SQL.Add('AND d.RDB$FIELD_NAME = ''RDB$FIELD_TYPE'' ');
SQL.Add(' AND b.RDB$RELATION_NAME=' + QuotedStr(TabloAdi) );
SQL.Add(' AND b.RDB$FIELD_NAME=' + QuotedStr(AlanAdi) );
SQL.Add('ORDER BY b.RDB$FIELD_ID ');
Active := True;
Result := Format('%s (%d)', [Trim(Fields[6].AsString), FieldByName('RDB$FIELD_LENGTH').AsInteger, Abs(FieldByName('RDB$FIELD_SCALE').AsInteger)]);
Active := False;
end; // With
end;



- Ayrıdığın vakit için ayrıca teşekkürler...
