adoquery从一表拷贝数据到另一个表 ( 积分: 50 )

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'Select * From 表一';
ADOQuery1.Open;
ADOQuery1.First;//这一句用与不用有没有区别?
ADOQuery2.Close;
ADOQuery2.SQL.Text := 'Insert Into 表二.......)';
while not ADOQuery1.Eof do
begin
ADOQuery2.Parameters.ParamValues['流水号'] := ADOQuery1.FieldByName('流水号').AsInteger;
........
ADOQuery2.ExecSQL;
ADOQuery1.Delete;
end;
以上的代码是将从表一中的数据拷贝到表二,同时删除表一中的数据,代码能正常运行,不懂有没有什么不对的地方,或者有更好的实现方法
 
"insert 表二 select * from 表一"
一句sql就能完成,这个语法我写的不一定完全,你可以查看sql的联机帮助.
 
对了,有一个忘记说了,表二中的记录字段比表一少,其它的字段还得给他赋值,比如:
ADOQuery2.Parameters.ParamValues['流水号'] := ADOQuery1.FieldByName('流水号').AsInteger;
ADOQuery2.Parameters.ParamValues['其它字段] := edit1.text;
 
先查詢出來,利用循環插入,然後刪除無用的數據;或者用insert select,然後刪除無用數據。順便提下:你的代碼要優化下
 
{=================================================================
功 能: 对自己复制多条记录加入数据集中(添加)
参 数: SetRecord:复制记录数量 SourceData 源数据集 TargetData 目标数据集
返回值: 无
=================================================================}
Procedure CopyReCordN(SetRecord: Integer; SourceData, TargetData: TDataSet);
Var
aField: Variant;
X, Y: Integer;
Begin
aField := VarArrayCreate([0, SetRecord - 1, 0, SourceData.FieldCount - 1], VarVariant);
For X := 0 To SetRecord - 1 Do Begin
For Y := 0 To (SourceData.FieldCount - 1) Do
aField[X, Y] := SourceData.Fields[Y].Value;
SourceData.Next;
End;

For X := 0 To SetRecord - 1 Do Begin
TargetData.Append;
For Y := 0 To (TargetData.FieldCount - 1) Do
TargetData.Fields[Y].Value := aField[X, Y];
End;
VarClear(aField);

End;
 
这个代码中没有 ADOQuery1.next 为什么也没有发生死循环呢?是不是因为删除掉了的原因,象这种没有明显的指针移动命令的代码,会不会在某种情况下造成数据定位错误的?
 
多人接受答案了。
 

Similar threads

回复
0
查看
866
不得闲
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部