Q&A

  • db경로명 알려면?
델파이4와 오라클7.3를 사용하고 있습니다.

데이터베이스 데스크탑에서 Open Table 창처럼 사용자가 알리아스를 선택하고 원하는 db파일을 선택할 수 있도록 하고 싶습니다.

즉, 오라클로 설정된 알리아스를 선택하면 작성된 테이블들이 보여지는 방법 좀 가르쳐주세요.(폼에 OpenDialog 콤포넌트를 사용하고 있습니다.)

1  COMMENTS
  • Profile
    김영대 1999.10.05 02:29
    // 아래의 방법은 Session을 이용하는 방법이나

    // ORACLE의 자료사전(Data Dictionary)를 이용하는 방법이 있습니다

    // all_tables 을 테이블(뷰)로 하여 SELECT 해보시면 됩니다



    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.