procedure CopyRecord(T1, T2: TDataSet);
var
I: Integer;
T2ColName: string;
begin
for I := 0 to T2.FieldCount - 1 do
begin
T2ColName := T2.Fields[I].FieldName;
if (T1.FindField(T2ColName) = nil) then continue;
T2.FieldByName(T2ColName).Assign(T1.FieldByName(T2ColName));
end;
end;
procedure CopyDataSet(T1, T2: TDataSet); //CopyDataSet(TDataSet(ADOTable1), DataSetZDYSJJ1);
begin
T1.DisableControls;
try
T1.First;
while not T1.Eof do
begin
T2.Append;
CopyRecord(T1, T2);
T1.Next;
end;
finally
T1.EnableControls;
end;
end;
procedure CopyStuct(T1: TDataSet; T2: TUserDataSet);
var
uf: TUserField;
i: Integer;
begin
for i:=0 to T1.FieldCount-1 do
begin
uf := TUserDataField.Create(T2);
uf.DataSet := T2;
uf.ID := T1.Fields.FieldName;
uf.Precision := T1.Fields.Size;
uf.DisplayName := T1.Fields.FieldName;
end;
end;
procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
ADOConnection1.ConnectionString := 'Provider=MSDASQL ersist Security Info=False;Data Source=EX;Extended Properties="DSN=EX;DefaultDir=C:\Documents and Settings\Administrator\桌面\T001.xls;DriverId=27;FIL=text;MaxBufferSize=2048 ageTimeout=5;"';
ADOTable1.TableName := '[T001$]';
ADOTable1.Open;
// dialogs.ShowMessage(TDAtaSet(ADOTable1).Fields[1].FieldName);
if DataSetZDYSJJ1.BizFields.Count=0 then
begin
CopyStuct(TDAtaSet(ADOTable1), DataSetZDYSJJ1);
end;
ADOTable1.First;
while not ADOTable1.Eof do
begin
dialogs.ShowMessage(TDAtaSet(ADOTable1).Fields[0].AsString); //现在还有数据
ADOTable1.Next;
end;
DataSetZDYSJJ1.Open; //-----------打开了自定义数据集,下面的就没有数据了!!
DataSetZDYSJJ1.EmptyDataSet;
ADOTable1.First;
while not ADOTable1.Eof do
begin
dialogs.ShowMessage(TDAtaSet(ADOTable1).Fields[0].AsString); //现在没有数据了
ADOTable1.Next;
end;
CopyDataSet(TDataSet(ADOTable1), DataSetZDYSJJ1);
end;
为什么打开了自定义数据集之后,ADOTable1中就没有数据了呢? |