C++Builder Tips


Jetデータベース・テーブルの作成(DAO/OLE経由)


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::Button2Click(TObject *Sender)
{
  int i;
  Variant vDAO;
  Variant vDB;
  Variant vTDF;
  Variant vFLD[9];

  AnsiString str = ExtractFilePath(Application->ExeName) + "TEST.mdb";

  //テーブルの存在チェックを行い、存在していた場合削除します。
  if (JetTableExists(str,"新規テーブル")){
    JetTableDelete(str,"新規テーブル");
  }

  //テーブルの作成
  vDAO = Variant::CreateObject("DAO.DBEngine.35");
  vDB = vDAO.Exec(Function("OpenDatabase") << str);
  vTDF = vDB.Exec(Function("CreateTableDef") << "新規テーブル");

  vFLD[0] = vTDF.Exec(Function("CreateField") << "FieldText" << dbText); //Text型
  vFLD[1] = vTDF.Exec(Function("CreateField") << "FieldInteger" << dbInteger); //Integer型
  vFLD[2] = vTDF.Exec(Function("CreateField") << "FieldLong" << dbLong); //Long型
  vFLD[3] = vTDF.Exec(Function("CreateField") << "Fieldbool" << dbBoolean); //bool型
  vFLD[4] = vTDF.Exec(Function("CreateField") << "FieldCurrency" << dbCurrency); //通貨型
  vFLD[5] = vTDF.Exec(Function("CreateField") << "FieldDateTime" << dbDate); //日付/時刻型
  vFLD[6] = vTDF.Exec(Function("CreateField") << "FieldSingle" << dbSingle); //単精度浮動小数点型
  vFLD[7] = vTDF.Exec(Function("CreateField") << "FieldDouble" << dbDouble); //倍精度浮動小数点型
  vFLD[8] = vTDF.Exec(Function("CreateField") << "FieldMemo" << dbMemo); //メモ型

  vFLD[0].Exec(PropertySet("AllowZeroLength") << true);

  for (i=0;i<9;i++){
    vTDF.Exec(Function("Fields")).Exec(Procedure("Append") << vFLD[i]);
  }

  vDB.Exec(Function("TableDefs")).Exec(Procedure("Append") << vTDF);

  vDB.Exec(Procedure("Close"));

}
//---------------------------------------------------------------------------

bool TForm1::JetTableExists(AnsiString strPath, AnsiString strTableName)
{
  bool bRet = 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"));
    if (str == strTableName){
      bRet = true;
      break;
    }
  }
  vDB.Exec(Procedure("Close"));
  return bRet;
}
//---------------------------------------------------------------------------

bool TForm1::JetTableDelete(AnsiString strPath, AnsiString strTableName)
{
  Variant vDAO;
  Variant vDB;

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

  vDB.Exec(Function("TableDefs")).Exec(Procedure("Delete") << strTableName);
  vDB.Exec(Procedure("Close"));
  return true;
}

//---------------------------------------------------------------------------

DownLoad bcbtips047.lzh 4KB(BCB5)