Migaro. 技術Tips

                       

ミガロ. 製品の技術情報
IBMiの活用に役立つ情報を掲載!


【Delphi/400】DBGridで行コピー

DBGridは表形式で簡単にデータが表示できるため利用することが多いかと思います。
今回はこのDBGridで現在選択している行をコピーして、新しい行を作成する方法をご紹介しましょう。

DBGridでは表示しているレコードやその値を変更する場合、
表示しているデータセット(TFDMemTableなど)側に対して変更を行います。
このため、行コピーするのであれば、コピー元になる行の値をセーブし、行挿入後その値をセットします。

そのとき下記のように項目値のセーブにはVariant型の配列を利用します。

procedure TForm1.Button1Click(Sender: TObject);
var
  FldArry : Variant;
  i : Integer;
begin
  // 配列を作成してレコード値をコピー
  FldArry := VarArrayCreate
             ([0,
              DBGrid1.DataSource.DataSet.FieldCount - 1], 
              VarVariant);
  for i := 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
  begin
    FldArry[i] := DBGrid1.DataSource.DataSet.Fields[i].Value;
  end;

  // レコード挿入
  DBGrid1.DataSource.DataSet.Append;
  // 配列データセット
  for i := 0 to DBGrid1.DataSource.DataSet.FieldCount - 1 do
  begin
    DBGrid1.DataSource.DataSet.Fields[i].Value := FldArry[i];
  end;
end;

 
この例ではすべてのフィールドについて行っていますが、
キーフィールドなど特定の項目を除くのであれば、
配列やフィールドの添え字を変更する等のロジック修正が必要です。

 

 

(ミガロ.情報マガジン「MIGARO News!!」Vol.115 2010年6月号より)