将记录从一个表复制到另一个不起作用
我正在使用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...
逐步通过这从所有的值为“空”表。
之后我得到一个空白记录添加到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;
我不会用tblTo.Insert
/tblTo.Post
内的CopyRecord
方法。而是在外面使用它,例如:
tblTwo.Append;
if CopyRecord(tblOne, tblTwo, 1) then
tblTwo.Post
else
tblTwo.Cancel;
这也可以在Edit
模式中重新使用。
感谢您的建议,我正在使用D5,对不起,应该提到它。 – user2175495 2013-03-17 23:01:15
感谢您的建议,我正在使用D5,对不起,应该提到它。 Kobik的代码仍然是相同的结果。目标文件中的空白行。通过,他们都没有通过“如果分配(FieldTo),然后”我设置了一个中断点,它永远不会到达那里。它显示了迭代的正确字段数(15),但所有“From”值仍然为空。这里愚蠢的东西不允许我完成编辑。五分钟太短时,太容易击中Enter并终止评论 - 数十亿次。 – user2175495 2013-03-17 23:08:17
@snowfrog发现的一个小错误,在NAA中提到:'它必须是:FieldTo:= tblTo.FindField(FieldFrom.FieldName);' – bummi 2014-12-09 13:28:39
是否有任何理由你没有使用TDataSet.CopyFields? (如使用Delphi的旧版[D2006以前版本])http://docwiki.embarcadero.com/Libraries/XE3/en/Data.DB.TDataSet.CopyFields – 2013-03-17 21:13:56
'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
你确定你的tblFrom没有问题吗?确保它是开放的,并且其中至少有一条记录要复制。 – 2013-03-18 01:55:15