C++Builder Tips


Jetデータベース・ダイナセットタイプを使ったテーブルへのアクセス(DAO/OLE経由)


ダイナセットを使ってJetデータベースのテーブルにアクセスするサンプルです。


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

#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::Button1Click(TObject *Sender)
{
  int i;
  int j;
  Variant vDAO;
  Variant vDB;
  Variant vRS;
  AnsiString strSql;

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

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

  strSql = "SELECT * FROM 新規テーブル";
  vRS = vDB.Exec(Function("Openrecordset") << strSql << dbOpenDynaset);

  if (vRS.Exec(Function("EOF"))){
  }else{
    vRS.Exec(Function("MoveLast"));
    ShowMessage("処理前レコード数は" + vRS.OlePropertyGet("RecordCount"));
    vRS.Exec(Function("MoveFirst"));
  }

  //削除
  vDAO.Exec(Function("BeginTrans"));
  while(!vRS.Exec(Function("EOF"))){
    vRS.Exec(Function("Delete"));
    vRS.Exec(Function("MoveNext"));
  }
  vDAO.Exec(Function("CommitTrans"));

  ShowMessage("削除後のレコード数は" + vRS.OlePropertyGet("RecordCount"));

  //追加
  vDAO.Exec(Function("BeginTrans"));
  for (i=0;i<10;i++){
    vRS.Exec(Function("AddNew"));
    vRS.Exec(PropertySet("FieldText") << IntToStr(i) + "番目追加");
    vRS.Exec(PropertySet("FieldInteger") << i);;
    vRS.Exec(Function("Update"));
  }
  vDAO.Exec(Function("CommitTrans"));

  ShowMessage("追加後のレコード数は" + vRS.OlePropertyGet("RecordCount"));

  //修正
  i = 0;
  vRS.Exec(Function("MoveFirst"));
  while(!vRS.Exec(Function("EOF"))){
    i++;
    vRS.Exec(Function("Edit"));

    vRS.Exec(PropertySet("FieldText") << IntToStr(i) + "番目更新");
    j = vRS.Exec(PropertyGet("FieldInteger"));
    vRS.Exec(PropertySet("FieldInteger") << j + 1000);

    vRS.Exec(Function("Update"));
    vRS.Exec(Function("MoveNext"));
  }

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

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

DownLoad bcbtips053.lzh 8KB(BCB5)