::: 델파이 Tip&Trick :::

델파이 Tip&Trick 성격에 맞지 않는 광고,비방,질문의 글은 즉시 삭제하며
내용을 복사하여 사용할 경우 반드시 이곳(http://www.howto.pe.kr)을 출처로 명시하여 주세요


Category

  김영대(2003-03-06 21:04:28, Hit : 3422, Vote : 825
 설치된 BDE Language Drivers 구하기

// 설치된 Borland Database Engine(BDE) 의 language driver 리스트를
// TComboBox로 읽어오는 예제입니다

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, db, DBTables, DbiProcs, DbiTypes, DbiErrs;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
{$R *.DFM}

procedure GetLangDrivers(pLangList: TStrings);
var
  Rslt: DBIResult;  // BDE에 의해 리턴된 값을 저장
  hCur: hDBICur;    // cursor handle 핸들
  LD: LDDesc;       // Language Driver Descriptor (LDDesc)
  weinit: Boolean;  // BDE가 초기화되어 있는지의 flag
  i, cnt: Integer;
begin
  weinit := False;
  pLangList.Clear;

  try
    // PC에 설치되어 있는 language driver 의 리스트를 연다
    // list의 값을 참조하려면 DbiGetNextRecord(), DbiGetCursorProps() 을 사용합니다
    // 각 값은 LDDesc 구조체로 저장되어 있습니다
    // hCur는 이 구조체 리스트의 cursor handle
    Rslt := DbiOpenLdList(hCur);

    if Rslt = DBIERR_NOTINITIALIZED then // 초기화 에러
    begin
      // BDE를 초기화 한다
      Rslt := DbiInit(nil);

      // Check()는 BDE 함수들에 의해 리턴된 값이 에러코드(DBIERR_NONE 이외의)이면
      // DbiError exception을 강제로 발생시킵니다
      // 아래 "except on E:EDBEngineError do"에 걸리겠죠...
      Check(Rslt);

      // BDE를 초기화 했다는 표시
      weinit := True;

      // 다시 PC에 설치되어 있는 language driver 의 리스트 열기를 시도
      Rslt := DbiOpenLdList(hCur); // hCur는 이 구조체 리스트의 cursor handle
      Check(Rslt);
    end;

    // 에러 메시지
    if Rslt <> DBIERR_NONE then
    begin
      // 더 많은 에러가 있지만 몇가지만 보여줌
      case Rslt of
        DBIERR_NOSUCHTABLE:
          ShowMessage('DBIERR_NOSUCHTABLE');
        DBIERR_TABLEOPEN:
          ShowMessage('DBIERR_TABLEOPEN');
        DBIERR_INVALIDHNDL:
          ShowMessage('DBIERR_INVALIDHNDL');
        else
          ; // not used
      end;
    end
    else
    begin
      // 각 language driver의 LDDesc 구조체에서 필요한 정보를 읽는다
      DbiGetRecordCount(hCur, cnt); // cursor handle의 갯수(language driver의 갯수)
      for i := 0 to cnt-1 do
      begin
        // LDDesc (language driver descriptor)
        //   Field                 Type     Description
        //   ---------------------------------------------------------------------
        //   szName                DBINAME  Specifies the driver's symbolic name.
        //   szDesc                DBINAME  Specifies the driver description.
        //   iCodePage             UINT16   Specifies the code page number.
        //   PrimaryCpPlatform     UINT16   Unused.
        //   AlternateCpPlatform   UINT16   Unused.
        DbiGetNextRecord(hCur, dbiNOLOCK, @LD, nil);
        pLangList.Add(LD.szDesc); // driver description만 읽어온다
      end;
    end;

    // DbiOpenLdList()로 구했던 cursor handle 을 닫는다
    Check(DbiCloseCursor(hCur));

    // 만약 BDE를 초기화 되었다면 이를 닫는다
    if weinit = True then
      Check(DbiExit());

  except on E:EDBEngineError do
    begin
      Check(DbiCloseCursor(hCur));
      if weinit = True then
        Check(DbiExit());
    end;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var
  oldcursor: TCursor;
begin
  // ComboBox control은 각 item에 변경이 생길때마다 매번 다시 그리기를
  // 하므로 redraw속도가 느립니다
  // WM_SETREDRAW 메시지를 ComboBox control에 보내어 redraw를 잠시 먼추게 한 후
  // 다시 WM_SETREDRAW 를 보내어 한번만 그리기를 합니다
  // 하지만 ComboBox는 이러한 역할을 하는 BeginUpdate, EndUpdate 메소드를
  // 가지고 있습니다
  ComboBox1.Items.BeginUpdate;
  ComboBox1.Sorted := False;
  ComboBox1.Clear;

  oldcursor := Screen.Cursor;
  Screen.Cursor := crHourGlass;
  try
    GetLangDrivers(ComboBox1.Items);
  finally
    ComboBox1.Items.EndUpdate;
    Screen.Cursor := oldcursor;
  end;

  ComboBox1.Sorted := True;
  ComboBox1.Items.EndUpdate;
  if ComboBox1.Items.Count > 0 then
    ComboBox1.ItemIndex := 0;
  Screen.Cursor := oldcursor;
end;

end.





691   [일반/컴포넌트] ListView 의 컬럼별로 Sort (내림차순 포함)  김영대 2003/03/05 5175 1098
690   [일반/컴포넌트] 명령행 인자 받아오기  김영대 2003/03/05 7195 1882
689   [네트웍/인터넷] List of raw FTP commands  김영대 2003/03/05 7228 1894
688   [네트웍/인터넷] RFC: Request for Comments  김영대 2003/03/05 7749 2039
687   [네트웍/인터넷] 윈도우즈 소켓의 에러번호에 대한 설명  김영대 2003/03/05 7803 2701
686   [일반/컴포넌트] 파일의 해부  김영대 2003/03/05 6343 1694
685   [일반/컴포넌트] ListBox의 스크롤바를 움직여보자  김영대 2003/03/05 4483 1095
684   [일반/컴포넌트] PopupMenu의 특정 MenuItem으로 이동하기  김영대 2003/03/05 2891 779
683   [일반/컴포넌트] 데스크탑의 아이콘을 몽땅 움직여보자!!  김영대 2003/03/05 6392 1897
682   [일반/컴포넌트] 마우스커서를 특정위치로 이동시키기  김영대 2003/03/05 5798 1210
681   [일반/컴포넌트] 제어판의 applet 띄우기  김영대 2003/03/05 2836 759
680   [일반/컴포넌트] INI 파일이 저장을 안 해?  김영대 2003/03/05 4082 1086
679   [일반/컴포넌트] 마우스영역 제어하기  김영대 2003/03/05 3605 978
678   [일반/컴포넌트] 리스트뷰에서 동적으로 칼럼삭제하기  김영대 2003/03/05 5235 1405
677   [일반/컴포넌트] Interesting Delphi Keystrokes !  김영대 2003/03/05 3595 1063
676   [일반/컴포넌트] Application 수준에서 한글/영문 제한두기  김영대 2003/03/05 5993 1854
675   [데이터베이스] dBASE Table File Extensions  김영대 2003/03/05 4592 1296
674   [데이터베이스] Paradox Table File Extensions  김영대 2003/03/05 3654 1033
673   [일반/컴포넌트] 파일의 속성(Attribute) 읽기 / 바꾸기  김영대 2003/03/05 4033 1048
672   [데이터베이스] DBGrid 에서 수직 Scroll Bar 감추기  김영대 2003/03/05 4633 1266
671   [윈도우즈 API] 인터넷 링크 만들기  김영대 2003/03/06 4553 1271
670   [네트웍/인터넷] 내 PC의 IP주소는 ?  김영대 2003/03/06 5277 1229
669   [일반/컴포넌트] 문자열의 암호화(Password 처리) & INI 파일  김영대 2003/03/06 6277 1488
668   [윈도우즈 API] 윈도우의 타이틀바를 없애보자!  김영대 2003/03/06 4444 1355
667   [윈도우즈 API] 클립보드의 내용을 TXT 파일에 담아보자!  김영대 2003/03/06 6313 1760
666   [시스템] 프로세서를 생성시켜보자!  김영대 2003/03/06 4552 1210
665   [일반/컴포넌트] 델파이의 Object Inspector 모방  김영대 2003/03/06 3584 825
664   [시스템] 시스템의 각종 정보  김영대 2003/03/06 7529 1306
663   [데이터베이스] DBGrid 특정 Cell에 색상넣기  김영대 2003/03/06 7695 1582
662   [데이터베이스] DBGrid 의 특정필드만 Highlighting 시키기  김영대 2003/03/06 4652 1140
661   [COM/OLE] How to register an OCX  김영대 2003/03/06 4995 1171
660   [윈도우즈 API] "Windows 정보" About 화면 사용하기  김영대 2003/03/06 6437 1985
659   [일반/컴포넌트] 문자열에 한글이 있는지 검사  김영대 2003/03/06 3840 980
658   [일반/컴포넌트] TColor값을 16진수 문자열로 바꾸기  김영대 2003/03/06 6144 1774
657   [일반/컴포넌트] 화면변경시 콤포넌트 위치와 크기를 조정  김영대 2003/03/06 4623 1128
656   [시스템] 마우스 포인터 속도 구하기  김영대 2003/03/06 5461 1715
655   [시스템] 마우스 포인터 속도 바꾸기  김영대 2003/03/06 4951 1251
654   [시스템] 마우스 자취(trails)의 갯수 조정하기  김영대 2003/03/06 5816 1838
653   [시스템] 마우스 두 번 누르기 속도 조정하기  김영대 2003/03/06 5875 1827
  [데이터베이스] 설치된 BDE Language Drivers 구하기  김영대 2003/03/06 3422 825

[1][2][3][4][5][6][7] 8 [9][10]..[25] [다음 10개]
 

Copyright 1999-2022 Zeroboard / skin by zero