データセットを開く/閉じる
データセットの理解:インデックス への移動
データセットのデータを読み出したり書き込んだりするには,まずデータセットをアプリケーションで開かなければなりません。データセットを開く方法は 2 つあります。
Open メソッド | サンプルコード |
---|---|
設計時にオブジェクトインスペクタを使用するか,実行時にコードによって,データセットの Active プロパティを True に設定する |
CustTable.Active := True;
CustTable->Active = true;
|
実行時にデータセットの Open メソッドを呼び出す。 |
CustQuery.Open;
CustQuery->Open();
|
データセットを開くと,データセットは最初に DB.BeforeOpen イベントを受け取り,データを取り込んでカーソルを開き,最後に DB.AfterOpen イベントを受け取ります。
新しく開かれたデータセットは参照モードになっています。これは,アプリケーションがデータを読めること,また,その中を移動できることを意味しています。
データセットの閉じ方は 2 つあります。
Close メソッド | サンプルコード |
---|---|
設計時にオブジェクトインスペクタを使用するか,実行時にコードによって,データセットの Active プロパティを False に設定する |
CustQuery.Active := False;
CustQuery->Active = false;
|
実行時にデータセットの Close メソッドを呼び出す。 |
CustTable.Close;
CustTable->Close();
|
データセットを開くときにデータセットが BeforeOpen イベントと AfterOpen イベントを受け取るのと同様に,閉じるときは DB.BeforeClose イベントと DB.AfterClose イベントを受け取ります。これらのイベントは,たとえば,データセットを閉じる前に,保留中の変更を登録するか,またはそれらを破棄するように,ユーザーに促すために使用することができます。ここで述べたイベントハンドラのコード例を次に示します。
procedure TForm1.CustTableVerifyBeforeClose(DataSet: TDataSet);
begin
if (CustTable.State in [dsEdit, dsInsert]) then begin
case MessageDlg('Post changes before closing?', mtConfirmation, mbYesNoCancel, 0) of
mrYes: CustTable.Post; { 変更を保存する }
mrNo: CustTable.Cancel; { 変更を破棄する}
mrCancel: Abort; { データセットを閉じる処理を中止 }
end;
end;
end;
void __fastcall TForm1::VerifyBeforeClose(TDataSet *DataSet)
{
if (DataSet->State == dsEdit || DataSet->State == dsInsert)
{
TMsgDlgButtons btns;
btns << mbYes << mbNo;
if (MessageDlg("Post changes before closing?", mtConfirmation, btns, 0) == mrYes)
DataSet->Post();
else
DataSet->Cancel();
}
}
メモ: Bde.DBTables.TTable コンポーネントの TableName などのプロパティを変更したい場合は,そのデータセットを閉じる必要があります。データセットを再び開いた時点で,新規のプロパティ値が有効になります。