Q&A

  • [급질문]콤보박스와 리스트 박스 사용시..
kwfc라고 하는 엘리어스에 포함된 모든 테이블을



콤보박스에 넣고 그 콤보박스의 테이블을 선택하면



해당 테이블의 필드명이 리스트 박스에 들어가도록



처리할려면 어떻게 해야 하는지 궁금합니다.



이때 선택된 테이블을 'aaa.db'라고 하고 해당 테이블의



필드명을 'bbb'라고 할때 리스트 박스에는 'aaa.bbb'값



이 들어가도록 할려구 합니다.



도움 주시면 감사하겠습니다.



1  COMMENTS
  • Profile
    조복기 1999.11.05 23:51
    김기환 wrote:

    > kwfc라고 하는 엘리어스에 포함된 모든 테이블을

    >

    > 콤보박스에 넣고 그 콤보박스의 테이블을 선택하면

    >

    > 해당 테이블의 필드명이 리스트 박스에 들어가도록

    >

    > 처리할려면 어떻게 해야 하는지 궁금합니다.

    >

    > 이때 선택된 테이블을 'aaa.db'라고 하고 해당 테이블의

    >

    > 필드명을 'bbb'라고 할때 리스트 박스에는 'aaa.bbb'값

    >

    > 이 들어가도록 할려구 합니다.

    >

    > 도움 주시면 감사하겠습니다.

    >





    안녕하세요..한델 자유게시판지기입니다.



    db에 연결된 테이블리스트를 구하고자할려면

    TSession.GetTableNames 프로시져를 사용하시면 됩니다..

    필드명은 한번에 구할수없어 for로 돌려야 되구요..

    테스트하던중에 혹시나해서 구창민님이 만든 팁모아 프로그램에서 검색해보니

    설명이 나와있더군요..

    (T.T;; 테스트하는데 30분이나 했는데 허무하당.)

    밑에 첨부합니다..



    테이블명, 필드(순번, 타입, 크기, 필드명) 의 정보를 보여주는 소스입니다.

    조금만 수정하시면 원하시는 결과를 얻으실 거에요..



    좋은하루되세요.~





    --------------------------------------------------------------------------------

    DB의 모든 테이블과 테이블의 필드정보 얻기

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, Db, DBTables;



    type

    TForm1 = class(TForm)

    Database1: TDatabase;

    Table1: TTable;

    ListBox1: TListBox;

    Memo1: TMemo;

    procedure FormActivate(Sender: TObject);

    procedure ListBox1DblClick(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation



    {$R *.DFM}



    procedure TForm1.FormActivate(Sender: TObject);

    begin

    Database1.Connected := False;

    Database1.Connected := True;



    // DataBase의 모든 테이블명을 ListBox로 읽어 들인다

    Session.GetTableNames(Database1.DatabaseName, '', False, False, ListBox1.Items);

    end;



    procedure TForm1.ListBox1DblClick(Sender: TObject);

    var

    i: Integer;

    m: string;

    begin

    if (Database1.Connected = False) or

    (ListBox1.ItemIndex < 0) then

    begin

    MessageBeep(-1);

    System.Exit;

    end;



    // 테이블명 할당

    Table1.TableName := ListBox1.Items[ListBox1.ItemIndex];

    Table1.Open;



    Memo1.Clear;

    for i := 0 to (Table1.FieldCount -1) do

    begin

    // 각 필드의 type을 구한다

    case Table1.Fields[i].DataType of

    ftUnknown : m := 'Unknown ';

    ftString : m := 'String ';

    ftSmallint : m := 'SmallInteger';

    ftInteger : m := 'Integer ';

    ftWord : m := 'Word ';

    ftBoolean : m := 'Boolean ';

    ftFloat : m := 'Float ';

    ftCurrency : m := 'Currency ';

    ftBCD : m := 'BCD ';

    ftDate : m := 'Date ';

    ftTime : m := 'Time ';

    ftDateTime : m := 'DateTime ';

    ftBytes : m := 'Byte ';

    ftVarBytes : m := 'VarBytes ';

    ftBlob : m := 'Blob ';

    ftMemo : m := 'Memo ';

    ftGraphic : m := 'Graphic ';

    end;



    // 순번 + 타입 + 크기 + 필드명

    Memo1.Lines.Add(IntToStr(i+1)+Chr(9)+m+IntToStr(Table1.Fields[i].DisplayWidth)+Chr(9)+Table1.Fields[i].DisplayLabel);

    end;

    end;



    end.