C++Builder Personal で DAO

パラメータクエリー


void __fastcall TForm1::Button18Click(TObject *Sender)
{
//表示用コントロールをクリア
ListBox1->Items->Clear();
ListBox2->Items->Clear();

Variant de = Variant::CreateObject("DAO.DBEngine.36");

//Edit3 に mdbファイル名を入力
Variant db = de.Exec(Function("OpenDatabase")<<Edit3->Text<<false<<false);
Variant qd = db.Exec(Function("CreateQueryDef")<<"");

//Edit4 に テーブル名を入力
//Edit5, Edit6 に フィールド名を入力
AnsiString sql = "UPDATE " + Edit4->Text + " "
+ "SET " + Edit6->Text + " = DataValue "
+ "WHERE " + Edit5->Text + " = KeyValue ";
qd.Exec(PropertySet("Sql")<<sql);

//Edit1, Edit2 に 値を入力
qd.Exec(PropertyGet("Parameters")<<"KeyValue").Exec(PropertySet("Value")<<(Edit1->Text));
qd.Exec(PropertyGet("Parameters")<<"DataValue").Exec(PropertySet("Value")<<(Edit2->Text));
qd.Exec(Procedure("Execute"));

//Edit4 に テーブル名を入力
//Edit5 に フィールド名を入力
sql = "SELECT * FROM " + Edit4->Text + " "
+ "WHERE " + Edit5->Text + " = KeyValue";
qd.Exec(PropertySet("Sql")<<sql);

//Edit1 に Key値を入力
qd.Exec(PropertyGet("Parameters")<<"KeyValue").Exec(PropertySet("Value")<<(Edit1->Text));
const int dbOpenForwardOnly = 8;
Variant rs = qd.Exec(Function("OpenRecordset")<<dbOpenForwardOnly);

if (!rs.Exec(PropertyGet("EOF")))
{
//表示用コントロールに項目内容をセット
Variant fd = rs.Exec(PropertyGet("Fields")<<0);
ListBox1->Items->Add(fd.Exec(PropertyGet("Value")));

fd = rs.Exec(PropertyGet("Fields")<<1);
ListBox2->Items->Add(fd.Exec(PropertyGet("Value")));

rs.Exec(Function("MoveNext"));
}

rs.Exec(Procedure("Close"));
db.Exec(Procedure("Close"));
}