Delphi 将记录从一个表复制到另一个表不起作用

Delphi 将记录从一个表复制到另一个表不起作用,delphi,delphi-5,bde,tdataset,Delphi,Delphi 5,Bde,Tdataset,我正在使用BDE和平板电脑。 我有两个相同的表,tblOne和tblTwo 我正在尝试将数据从一个表复制到另一个表。不是整个数据库,只有一个特定的记录使用: 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

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

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表的所有值都为“Null”

发帖后,我在
tblTo
中添加了一条空白记录。所有值都为空并不奇怪。:)

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

我已经做了好几个小时了,不能让它工作。可能是一些简单的东西,我看过头了。我添加了“var”参数,看看这是否有什么不同,但没有


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

以下是我的操作方法:

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;
我不会在
CopyRecord
方法中使用
tblTo.Insert
/
tblTo.Post
。而是在外部使用,例如:

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

这也可以在
编辑
模式下重复使用

以下是我的做法:

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;
我不会在
CopyRecord
方法中使用
tblTo.Insert
/
tblTo.Post
。而是在外部使用,例如:

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

这也可以在
编辑
模式下重复使用

您没有使用TDataSet.CopyFields有什么原因吗?(例如使用旧的[D2006之前]版本的Delphi)
如果tblTo.FindField(tblFrom.Fields[i].FieldName)为nil,则tblTo.FieldByName(tblFrom.Fields[i].FieldName)。值:=tblFrom.Fields[i].Value-会更准确。您确定tblFrom没有问题吗?确保它处于打开状态,并且实际上至少有一条记录要复制。是否有任何原因不使用TDataSet.CopyFields?(例如使用旧的[D2006之前]版本的Delphi)
如果tblTo.FindField(tblFrom.Fields[i].FieldName)为nil,则tblTo.FieldByName(tblFrom.Fields[i].FieldName)。值:=tblFrom.Fields[i].Value-会更准确。您确定tblFrom没有问题吗?确保它是打开的,并且实际上至少有一条记录要复制。谢谢你的建议,我使用的是D5,对不起,我应该提到它。谢谢你的建议,我使用的是D5,对不起,我应该提到它。Kobik的代码仍然是相同的结果。目标文件中的空行。通过这一步,他们没有一个人进入“如果分配(FieldTo)then”,我在里面设置了一个断点,但它从未到达那里。它显示了要迭代的字段(15)的正确数量,但所有“From”值仍然为空。这件蠢事不允许我完成编辑。五分钟太短了,很容易点击回车键并终止评论——无数次。由@snowfrog发现的小错误,在NAA中提到:
它必须是:FieldTo:=tblTo.FindField(FieldFrom.FieldName)谢谢你的建议,我使用的是D5,对不起,应该提到它。谢谢你的建议,我使用的是D5,对不起,应该提到它。Kobik的代码仍然是相同的结果。目标文件中的空行。通过这一步,他们没有一个人进入“如果分配(FieldTo)then”,我在里面设置了一个断点,但它从未到达那里。它显示了要迭代的字段(15)的正确数量,但所有“From”值仍然为空。这件蠢事不允许我完成编辑。五分钟太短了,很容易点击回车键并终止评论——无数次。由@snowfrog发现的小错误,在NAA中提到:
它必须是:FieldTo:=tblTo.FindField(FieldFrom.FieldName)