如何簡單的將目前這筆資料再複製一筆

我是將 TDataSet.AppendRecord Method 變形一下:
須注意 Unique Key 重複的問題喔

procedure MyAppendRecord(CD: TDataSet; KeyValues: Variant);
var KeyArray : Array of TVarRec;
    i,aCount : Integer;
begin
  if VarIsArray(KeyValues) then
    aCount := VarArrayHighBound(KeyValues,1) + 1
  else
    aCount := 1;
  SetLength(KeyArray, aCount);
  if VarIsArray(KeyValues) then begin
    for i := 0 to aCount - 1 do begin
      KeyArray[i].VType := vtVariant;
      GetMem(KeyArray[i].VVariant,Sizeof(Variant));
      FillChar(KeyArray[i].VVariant^,Sizeof(Variant),0);
      KeyArray[i].VVariant^ := Variant(KeyValues[i]);
    end;
  end
  else begin
    KeyArray[0].VType := vtVariant;
    GetMem(KeyArray[0].VVariant,Sizeof(Variant));
    FillChar(KeyArray[0].VVariant^,Sizeof(Variant),0);
    KeyArray[0].VVariant^ := Variant(KeyValues);
  end;
  CD.AppendRecord(KeyArray);
  if VarIsArray(KeyValues) then
    for i := 0 to aCount - 1 do
      FreeMem(KeyArray[i].VVariant,Sizeof(Variant))
  else
    FreeMem(KeyArray[0].VVariant,Sizeof(Variant));
end;

procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
    Fields: string;
begin
  Fields := '';
  for i := 0 to Query1.FieldCount - 1 do Fields := Fields + Query1.Fields[i].FieldName+';';
  MyAppendRecord(Query1,Query1[Fields]);
end;

Chance36


  提供另一種解法:
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
  v : variant ;
  Flds :String ;
  Sl : TStrings ;
begin
  Sl := TStringList.create;
  Dataset.GetFieldNames(Sl);
  Flds := Sl.CommaText;
  Sl.Free;
  Flds := StringReplace(Flds,',',';',[rfReplaceAll]);
  // 以下與上面rovi大大的寫法是相同的
  v := DataSet[Flds];
  DataSet.Append;
  DataSet[Flds] := v;
  // 在這修正不同的欄位資料
  DataSet.post;
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值