レコード全体の変更

提供: RAD Studio
移動先: 案内検索

データの変更 への移動


フォーム上の、グリッドとナビゲータを除くすべてのデータベース対応コントロールは、レコード内の 1 つのフィールドにアクセスします。

ただし、データセットの背後にあるデータベース テーブルの構造が安定していて変化しないなら、レコード構造全体を操作する以下のメソッドをコードで使用することができます。次の表に、レコード内の個々のフィールドではなくレコード全体を操作できるメソッドをまとめます。

レコード全体を操作するメソッド: 

メソッド 説明

AppendRecord([値の配列])

指定された列値を持つレコードをテーブルの末尾に追加します。Append に似ています。暗黙的に Post を実行します。

InsertRecord([値の配列])

テーブルの現在のカーソル位置の前に、指定された値をレコードとして挿入します。Insert に似ています。暗黙的に Post を実行します。

SetFields([値の配列])

対応するフィールドの値を設定します。それぞれの TField への値の代入に似ています。アプリケーションで明示的に Post を実行しなければなりません。


これらのメソッドは、値の配列を引数として受け取ります。配列のそれぞれの値は、背後にあるデータセットの 1 つの列に対応します。値に指定できるのは、リテラルか変数か NULL です。引数の値の数がデータセットの列数よりも少ない場合、残りの値は NULL と見なされます。

インデックスのないデータセットでは、AppendRecord はデータセットの末尾にレコードを追加し、InsertRecord は現在のカーソル位置の後にレコードを挿入します。インデックス付きのデータセットでは、どちらのメソッドも、インデックスに基づいてテーブル内の正しい位置にレコードを配置します。どちらの場合でも、カーソルはレコードの位置に移動します。

SetFields は、パラメータ配列に指定された値をデータセットのフィールドに代入します。SetFields を使用する前に、アプリケーションでまず Edit を呼び出して、データセットを dsEdit モードにしなければなりません。また、変更を現在のレコードに適用するには、Post を実行しなければなりません。

SetFields を使って、既存レコード内のすべてではなく一部のフィールドを変更したい場合は、変更しないフィールドの値として NULL を渡すことができます。指定した値の数がレコードのフィールド数よりも少ない場合、SetFields は足りない分に NULL 値を代入します。この NULL 値によって、フィールドの既存の値が上書きされます。

たとえば、データベースに COUNTRY というテーブルがあり、Name、Capital、Continent、Area、Population という列が含まれているとします。CountryTable という名前の Bde.DBTables.TTable コンポーネントが COUNTRY テーブルにリンクされていると、次の文によって COUNTRY テーブルにレコードが挿入されます。

CountryTable.InsertRecord(['Japan', 'Tokyo', 'Asia']);
CountryTable->InsertRecord(ARRAYOFCONST(("Japan", "Tokyo", "Asia")));

この文では Area と Population の値が指定されていないため、そこには NULL 値が挿入されます。テーブルは Name にインデックスが付いているため、文を実行するとアルファベット順の "Japan" の位置にレコードが挿入されます。

レコードを更新するには、たとえば次のようなコードを使用できます。

with CountryTable do
begin
  if Locate('Name', 'Japan', loCaseInsensitive) then;
  begin
    Edit;
    SetFields(nil, nil, nil, 344567, 164700000);
    Post;
  end;
end;
TLocateOptions SearchOptions;
SearchOptions->Clear();
SearchOptions << loCaseInsensitive;
if (CountryTable->Locate("Name", "Japan", SearchOptions))
{
  CountryTable->Edit();
  CountryTable->SetFields(ARRAYOFCONST(((void *)NULL, (void *)NULL, (void *)NULL,
        344567, 164700000)));
  CountryTable->Post();
}

このコードでは、Area と Population のフィールドに値を割り当て、それをデータベースに登録しています。3 つの NULL ポインタは、最初の 3 つの列の現在の内容をそのまま維持するためのプレースホルダとして機能します。

関連項目