Q&A

  • Data Type
TTable로 특정 table을 읽어와서 그 table의 field가 varchar2인지 char인지
알수는 없을까요?

SQL Explorder에 보면 어떤 DB던지 그 DB에 맞게 DataType가 나오자노요...

그렇게 하려면 우찌 해야 하는지?????

그러고 그 Field가 primary key인지 알수 있는 방법은????
3  COMMENTS
  • Profile
    김운필 2004.05.11 20:16
    해당 DB의 시스템 테이블을 Query하여
    데이터 Type을 사용하셔야 될 것 같네요.


    델파이에서 char 와 string에 관한 Data Type은 동일하게 ftString 입니다.

    SQL Explorer에서는 델파이에서의 Data Type을 보여주고 있지는 않습니다.

    직접 DB에 연결하여 해당 필드의 Data Type을 보여주는 것 같습니다.

    오라클을 사용하시는 것 같은데

    참고로 MsSql의 경우 해당 DB의 시스템 테이블
    sysobjects, syscolumns,systypes 테이블을 조인해서
    정보를 가지고 오면 됩니다

    <DB Layout 보기>
    ----------------------------------------------------------
    select a.name '테이블명' b.colid '순번', b.name '필드명', c.name '데이터타입', b.length '길이', b.isnullable '널허용'
    from sysobjects a join syscolumns b on a.xtype='U' and a.id = b.id
    join systypes c on b.xtype = c.xtype
    order by a.name, b.colid
    --------------------------------------------------------------

    <해당 테이블만 Query 하면 >
    select b.colid '순번', b.name '필드명', c.name '데이터타입', b.length '길이', b.isnullable '널허용'
    from sysobjects a join syscolumns b on a.xtype='U' and a.id = b.id
    join systypes c on b.xtype = c.xtype
    where a.name = '테이블이름'
    order by b.colid
    ---------------------------------------------------------------




  • Profile
    Crazy 2004.05.05 01:09
    안녕하세요.
    답변 달려고 보니까 최용일님이 바로 답변을 다셧네요..
    혹시해서 올립니다.
    예전에 테이블관리로 자료실에 올려놓은게 있는데 이거 참조하시면 될듯 싶군요..
    혹시나 소스가 필요하시면 말씀하시거나 메일보내주세요. 그럼..

    procedure TF_Table.FormCreate(Sender: TObject);
    var
       DBNames : TStringList;
    begin

       DBNames := TStringList.Create;
       Session.GetDataBaseNames(DBNames);
       ComboBox1.Items :=DBNames;
       DBNames.Free;

       Session.GetDataBaseNames(ComboBox1.Items);
    end;

    procedure TF_Table.Button1Click(Sender: TObject);
    var
       CurrentDB : String;
    begin
       DxTreeList1.ClearNodes;
       bUpdate := False;  
       Lab_Mode.Caption := '테이블 목록 로딩중 ...';
       ComboBox2.Clear;
       CurrentDB := ComboBox1.Items[ComboBox1.itemindex];
       session.GetTableNames(CurrentDB, '', True, False, ComboBox2.Items);

       if ComboBox2.Items.Count = 0 then
       begin
          Showmessage( '테이블이 하나도 없습니다!' +#13+
                       '다른 데이타베이스를 선택하세요!' );
          Exit;
       end else Lab_Mode.Caption := '테이블을 선택하시오!';
    end;

    procedure TF_Table.Button3Click(Sender: TObject);
    // array[ftUnknown..ftGuid]
    const MyField_Type : Array[TFieldType] of String[12] = ( 'Unknown' ,      'String',
                       'Smallint', 'Integer',     'Word',      'Boolean',  'Float',   'Currency',
                       'BCD',      'Date',        'Time',      'DateTime', 'Bytes',   'VarBytes',
                       'Auto Inc',  'Blob',        'Memo',      'Graphic',  'FmtMemo', 'ParadoxOle',
                       'DBaseOle', 'TypedBinary', 'Cursor',    'FixedChar', 'WideString', 'LargeInt',
                       'ADT',      'Array',       'Reference', 'DataSet', 'OraBlob', 'OraClob',
                       'Variant', 'Interface', 'IDispatch', 'Guid' );

    {==================== Paradox ==================================================
    const
      MyFielddefs: Array[ftUnknown..ftTypedBinary] of String [11] =
        ('Unknown', 'String', 'Smallint', 'Integer',
        'Word', 'Boolean', 'Float', 'Currency', 'BCD',
        'Date', 'Time', 'DateTime', 'Bytes', 'VarBytes',
        'AutoInc', 'Blob', 'Memo', 'Graphic', 'FmtMemo',
        'ParadoxOle', 'DBaseOle', 'TypedBinary');
    ===============================================================================}
    var
       i : Byte;
       Item : TDxTreeListNode;
    begin
       Session.Active := True;
       Table1.Close;
       Table1.DatabaseName := ComboBox1.Items[ComboBox1.itemindex];
       Table1.TableName := ComboBox2.Text;
       Table1.Active := True;
       Table1.SetKey;

       DxTreeList1.ClearNodes;
       Lab_Mode.Caption := '필드 목록 로딩중 ...';

       if Table1.FieldCount <> 0 then
       begin
          Item := DxTreeList1.TopNode;

          for i := 0 to Table1.FieldCount - 1 do
          begin
             Item := DxTreeList1.Add;
             if Table1.Fields[i].IsIndexField then Item.Values[0] := '*';
             Item.Values[1] := UpperCase(Table1.Fields[i].FieldName);
             Item.Values[2] := MyField_Type[Table1.Fields[i].DataType];
             Item.Values[3] := IntToStr( Table1.Fields[i].DataSize -1 );
             Item := Item.GetNext;
          end;
          Lab_Mode.Caption := '필드 목록 로딩 완료';
          Lab_Count.Caption := IntToStr( Table1.FieldCount ) + ' 개';
          DxTreeList1.Bands[0].Caption := 'DataBase Name : ' + ComboBox1.Text + ' / ' +
                                          'Table Name : ' + ComboBox2.Text;

       end;
    end;


  • Profile
    최용일 2004.05.05 01:04
    안녕하세요. 최용일입니다.

    TField의 속성을 보시면 DataType이라는 속성이 있습니다. 이게 그 필드가 어떤 데이터형인가를 알려주는 속성이죠...

    type TFieldType = (ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftInterface, ftIDispatch, ftGuid);

    Description

    TFieldType type is the set of values for the DataType property field objects, field definition objects, and parameter objects. Classes in which TFieldType values are used include TField (and descendants), TFieldDef, TParam, TParameter, and TAggregate. TFieldType values are also used in field-related functions and methods like TFieldDefs.Add. The following table describes each value:

    Value        Description

    ftUnknown        Unknown or undetermined
    ftString        Character or string field
    ftSmallint        16-bit integer field
    ftInteger        32-bit integer field
    ftWord        16-bit unsigned integer field
    ftBoolean        Boolean field
    ftFloat        Floating-point numeric field
    ftCurrency        Money field
    ftBCD        Binary-Coded Decimal field
    ftDate        Date field
    ftTime        Time field
    ftDateTime        Date and time field
    ftBytes        Fixed number of bytes (binary storage)
    ftVarBytes        Variable number of bytes (binary storage)

    ftAutoInc        Auto-incrementing 32-bit integer counter field
    ftBlob        Binary Large OBject field
    ftMemo        Text memo field
    ftGraphic        Bitmap field
    ftFmtMemo        Formatted text memo field
    ftParadoxOle        Paradox OLE field
    ftDBaseOle        dBASE OLE field
    ftTypedBinary        Typed binary field
    ftCursor        Output cursor from an Oracle stored procedure (TParam only)
    ftFixedChar        Fixed character field
    ftWideString        Wide string field
    ftLargeInt        Large integer field
    ftADT        Abstract Data Type field

    ftArray        Array field
    ftReference        REF field
    ftDataSet        DataSet field
    ftOraBlob        BLOB fields in Oracle 8 tables
    ftOraClob        CLOB fields in Oracle 8 tables
    ftVariant        Data of unknown or undetermined type
    ftInterface        References to interfaces (IUnknown)
    ftIDispatch        References to IDispatch interfaces
    ftGuid        globally unique identifier (GUID) values

    ^^ 항상 즐코하세요...