C++Builder Tips


Jetデータベース・テーブル名の列挙(DAO/OLE経由)


テーブル名をリストボックスに出力するサンプルです。

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <dbdaoint.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  AnsiString str = ExtractFilePath(Application->ExeName) + "TEST.mdb";

  bool bRet = CtlTblNameAdd(ListBox1,str);
}
//---------------------------------------------------------------------------

bool TForm1::CtlTblNameAdd(TObject *Sender, AnsiString strPath)
{
  AnsiString strClassName = Sender->ClassName();
  TListBox* lst;

  if (strClassName == "TListBox"){
    lst = (TListBox*)Sender;
  }else{
    return false;
  }

  int i;
  int iMax;
  int iAttributes;
  Variant vDAO;
  Variant vDB;
  AnsiString str;

  vDAO = Variant::CreateObject("DAO.DBEngine.35");
  vDB = vDAO.Exec(Function("OpenDatabase") << strPath);

  iMax = vDB.Exec(Function("TableDefs")).Exec(Function("Count"));
  for (i=0;i<iMax;i++){
    iAttributes = vDB.Exec(PropertyGet("TableDefs")<<i).Exec(PropertyGet("Attributes"));
    if ((iAttributes & dbSystemObject)==0){
    }else{
      continue;
    }
    str = vDB.Exec(PropertyGet("TableDefs")<<i).Exec(PropertyGet("Name"));
    lst->Items->Add(str);
  }

  vDB.Exec(Procedure("Close"));
  return true;
}


DownLoad bcbtips055.lzh 10KB(BCB5)