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

问题描述:

我正在使用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... 

逐步通过这从所有的值为“空”表。

之后我得到一个空白记录添加到tblTo。毫不奇怪,所有的值都是空的。 :)

我在哪里错了复制数据?它没有使它复制功能。

我一直在这个几个小时,不能使它的工作。可能是简单的我看起来很简单。我添加了“var”参数来查看是否有任何区别,但没有。

哦,通过由,我开始循环从“1”而不是“0”,因为这两个文件中的第一个字段是AutoInc

+1

是否有任何理由你没有使用TDataSet.CopyFields? (如使用Delphi的旧版[D2006以前版本])http://docwiki.embarcadero.com/Libraries/XE3/en/Data.DB.TDataSet.CopyFields – 2013-03-17 21:13:56

+2

'if tblTo.FindField(tblFrom.Fields [i] .FieldName) nil then tblTo.FieldByName(tblFrom.Fields [i] .FieldName).Value:= tblFrom.Fields [i] .Value;' - 它会更准确。 – Abelisto 2013-03-17 21:23:20

+2

你确定你的tblFrom没有问题吗?确保它是开放的,并且其中至少有一条记录要复制。 – 2013-03-18 01:55:15

这里是我会怎么做:

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.PostCopyRecord方法。而是在外面使用它,例如:

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

这也可以在Edit模式中重新使用。

+0

感谢您的建议,我正在使用D5,对不起,应该提到它。 – user2175495 2013-03-17 23:01:15

+0

感谢您的建议,我正在使用D5,对不起,应该提到它。 Kobik的代码仍然是相同的结果。目标文件中的空白行。通过,他们都没有通过“如果分配(FieldTo),然后”我设置了一个中断点,它永远不会到达那里。它显示了迭代的正确字段数(15),但所有“From”值仍然为空。这里愚蠢的东西不允许我完成编辑。五分钟太短时,太容易击中Enter并终止评论 - 数十亿次。 – user2175495 2013-03-17 23:08:17

+1

@snowfrog发现的一个小错误,在NAA中提到:'它必须是:FieldTo:= tblTo.FindField(FieldFrom.FieldName);' – bummi 2014-12-09 13:28:39