Delphi 将记录从一个表复制到另一个表不起作用
我正在使用BDE和平板电脑。 我有两个相同的表,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
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)代码>