当前位置:主页>销售管理软件> 列表

如何真正复制数据集? 找仓库进销存管理

记账软件版1楼: 用ADOQuery,如何真正复制数据集?
试过用clone和_redcordset属性生成一个副本,
但只是复制内存地址,不是真正复制数据集,修改副本会连原来的数据集都修改了,
达不到备份的效果,请问如何真正复制数据集?

2楼: 对象复制,Assign 如销售管理

3楼: var
sTemp: PChar;
begin
//保存到变量
GetMem(sTemp,ADOQuery1.RecordSize);
ADOQuery1.GetCurrentRecord(sTemp);
//复制记录集
ADOQuery1.GetCurrentRecord(ADOQuery2.ActiveBuffer);

4楼: to liyinwei:
不行呀,是不是写错了,帮忙再看看!

5楼: 错误提示。

6楼: 没有错误提示,只是执行后目标数据集没有数据或没有打开

记账软件版7楼: adoquery1.Assign(adoquery2)
这个可以达到复制数据的目的,它是组件复制

8楼: to weichao9999:
报错:
Cannot assign a TadoQuery to a TadoQuery .

9楼: 看到楼主的留言了:
方法1:重新创建结构相同的数据表,导入数据;
方法2:将数据另存为XML文件保存下来!

10楼: TADOQuery 虽然是2个,但关联的是同一个ADO数据源,所以会联动

可以用Provider + ClientDataset 复制数据集
Provider1.dataset :=TADOQuery1;
TClientDataSet.data := Provider1.data;

如果你想复制表,建议用SQL语句实现,select into
专业的数据复制可以采用微软DTS服务,有可视界面,可定制包。

11楼:

12楼: 如果你用 EHLib 做复制、粘贴的话,可以这样:
Copy: DBGridEH_DoCopyAction(DBGridEH1,False);
Cut : DBGridEH_DoCutAction(DBGridEH1,False);
Paste: DBGridEH_DoPasteAction(DBGridEH1,False);
如果要两份数据,目的是备份:
1、若用 SQL 就用其自带的备份操作;
2、用 Paradox 或 Access 就复制数据库:CopyFile(PChar(OrgFile),PChar(OBJFile)),False); 如仓库进销存管理

13楼: procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Open;

ADOQuery2.Clone(TCustomADODataSet(ADOQuery1),ltUnspecified);
ADOQuery2.Edit;
ADOQuery2.FieldByName(''11'').Value := ''asd123'';
ADOQuery2.UpdateRecord;

ADOQuery1.Open;
end;

记账软件版14楼: {=================================================================


功 能: 對自己復制多條記錄加入數據集中
參 數: SetRecord:復制記錄數量 SourceData 源數據集 TargetData 目標數據集
返回值: 無
=================================================================}
Procedure CopyCordset(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;

調用方法:CopyCordset(ADOQuery1.RecordCount,ADOQuery1,ADOQuery2); //將ADOQuery1的數據集全部復制到ADOQuery2裡。

15楼: 多人接受答案了。