Jetデータベース・テーブルの作成(DAO/OLE経由)で作成した"新規テーブル"というテーブルに"Primarykey"という名前の主キーを作成するサンプルです。
//---------------------------------------------------------------------------
#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::Button3Click(TObject *Sender)
{
Variant vDAO;
Variant vDB;
Variant vTDF;
Variant vIDX;
Variant vIDX2; //?????
Variant vFLD[2];
AnsiString str = ExtractFilePath(Application->ExeName) + "TEST.mdb";
//インデックスの存在チェックを行い、存在していた場合削除します。
if (JetTableIndexExists(str,"新規テーブル","PrimaryKey")){
JetTableIndexDelete(str,"新規テーブル","PrimaryKey");
}
vDAO = Variant::CreateObject("DAO.DBEngine.35");
vDB = vDAO.Exec(Function("OpenDatabase") << str);
vTDF = vDB.Exec(PropertyGet("TableDefs") << "新規テーブル");
vIDX = vTDF.Exec(Function("CreateIndex") << "PrimaryKey");
vFLD[0] = vIDX.Exec(Function("CreateField") << "FieldText");
vFLD[1] = vIDX.Exec(Function("CreateField") << "FieldInteger");
vFLD[2] = vIDX.Exec(Function("CreateField") << "FieldLong");
vIDX.Exec(PropertySet("Primary") << true); //プライマリキーの設定
vIDX.Exec(PropertySet("Unique") << true); //ユニークキーの設定
vIDX.Exec(Function("Fields")).Exec(Procedure("Append") << vFLD[0]);
vIDX.Exec(Function("Fields")).Exec(Procedure("Append") << vFLD[1]);
vIDX.Exec(Function("Fields")).Exec(Procedure("Append") << vFLD[2]);
vTDF.Exec(Function("Indexes")).Exec(Procedure("Append") << vIDX);
vDB.Exec(Procedure("Close"));
}
//---------------------------------------------------------------------------
bool TForm1::JetTableIndexExists(AnsiString strPath, AnsiString strTableName, AnsiString strIndexName)
{
bool bRet = false;
int i;
int iMax;
Variant vDAO;
Variant vDB;
Variant vTDF;
AnsiString str;
vDAO = Variant::CreateObject("DAO.DBEngine.35");
vDB = vDAO.Exec(Function("OpenDatabase") << strPath);
vTDF = vDB.Exec(PropertyGet("TableDefs") << strTableName);
iMax = vTDF.Exec(Function("Indexes")).Exec(Function("Count"));
for (i=0;i<iMax;i++){
str = vTDF.Exec(PropertyGet("Indexes")<<i).Exec(PropertyGet("Name"));
if (str == strIndexName){
bRet = true;
break;
}
}
vDB.Exec(Procedure("Close"));
return bRet;
}
//---------------------------------------------------------------------------
bool TForm1::JetTableIndexDelete(AnsiString strPath, AnsiString strTableName, AnsiString strIndexName)
{
Variant vDAO;
Variant vDB;
Variant vTDF;
vDAO = Variant::CreateObject("DAO.DBEngine.35");
vDB = vDAO.Exec(Function("OpenDatabase") << strPath);
vTDF = vDB.Exec(PropertyGet("TableDefs") << strTableName);
vTDF.Exec(Function("Indexes")).Exec(Procedure("Delete") << strIndexName);
vDB.Exec(Procedure("Close"));
return true;
}//---------------------------------------------------------------------------
DownLoad bcbtips048.lzh 4KB(BCB5)