0

我正在使用 BDE 和平面表。我有两个相同的表,tblOnetblTwo 正在尝试将数据从一个表复制到另一个表。不是整个数据库,只是一个使用这个的特定记录:

function Tdm.CopyRecord(var tblFrom,tblTo : TTable) : Boolean;
var
  i : Integer;
begin
  Result:=False;
  try
    tblTo.Insert;
    for i:=1 to tblFrom.FieldCount-1 do
    begin
      if tblFrom.Fields[i].FieldName = tblTo.Fields[i].FieldName then
        tblTo.Fields[i].Value:=tblFrom.Fields[i].Value;
    end;
    tblTo.Post;
    Result:=True;
  finally
  end;
end;

if CopyRecord(tblOne,tblTwo) then...

单步执行所有这些值对于 From Table 都是“Null”。

发布后,我将一条空白记录添加到tblTo. 所有的值都是空的,这并不奇怪。:)

我在复制数据时哪里出错了?它没有进入复制功能。

我已经在这工作了几个小时,无法让它工作。可能我忽略了一些简单的事情。我添加了“var”参数以查看是否有任何区别,但没有。

哦,顺便说一句,我从“1”而不是“0”开始循环,因为两个文件中的第一个字段都是AutoInc.

4

1 回答 1

4

这是我的做法:

function CopyRecord(tblFrom, tblTo: TTable; const StartIndex: Integer=0): Boolean;
var
  i: Integer;
  FieldFrom, FieldTo: TField;
begin
  Result := False;
  for i := StartIndex to tblFrom.FieldCount - 1 do
  begin
    FieldFrom := tblFrom.Fields[i];
    FieldTo := tblTo.FindField(FieldFrom.FieldName);
    if Assigned(FieldTo) then
    begin
      FieldTo.Value := FieldFrom.Value;
      Result := True;
    end;
  end;
end;

我不会方法中使用tblTo.Insert/ 。而是在外面使用它,例如:tblTo.Post CopyRecord

tblTwo.Append;
if CopyRecord(tblOne, tblTwo, 1) then
  tblTwo.Post
else
  tblTwo.Cancel;

这也可以在Edit模式下重复使用。

于 2013-03-17T22:33:49.793 回答