是这样啊!我懂了!我想不用CLIENTDATASET可以获取临时数据集吗?
下面是我的源码,希望可以得到点更改的建议
//*****************创建临时表数据集***************************//
function TDataLoadFrm.CreateTmptab(const AFieldDefs:TFieldDefs):TDataSet;
var
TempTable:TClientDataSet;
begin
TempTable:=nil;
Result:=nil;
if AFieldDefs<>nil then
begin
try
TempTable:=TClientDataSet.Create(Application);
TempTable.FieldDefs.Assign(AFieldDefs);
TempTable.CreateDataSet;
CreateTmptab:=TempTable;
Except
if TempTable<>nil then
TempTable.Free;
CreateTmptab:=nil;
raise;
end
end;
end;
//****************************数据加载************************//
function TDataLoadFrm.DataLoad(FileName,Depart:string):TDataSet;
var
textfilevar: TextFile;
strtemp,strFstFieldType: string;
intLen,intNum,i,j: Integer;
temDataSet:TDataSet;
CliDS:TClientDataSet;
begin
if FileName = '' then exit;
AssignFile(textfilevar,FileName);
Reset(textfilevar);
try
Readln(textfilevar,strtemp) //表名信息
except
showmessage('sdsdf')
end;
Readln(textfilevar,strtemp); //字段信息
intLen := Length(trim(strtemp));
intNum := 0;
for i := 1 to intLen do
if Copy(strtemp, i, 1) = Depart then
intNum := intNum + 1;
CliDS:=TClientDataSet.Create(Application);
temDataSet:=TDataSet.Create(Application);
if pos(Depart,strtemp) > 0 then
begin
for j :=0 to intNum-1 do
begin
CliDS.FieldDefs.Add(copy(strTemp, 1, pos(Depart,strtemp) - 1),ftstring,50,false);
strtemp := copy(strtemp, pos(Depart,strtemp) + 1, length(strtemp) - pos(Depart,strtemp));
end;
end;
temDataSet:=CreateTmptab(CliDS.FieldDefs); //?????????????????????????
Readln(textfilevar,strtemp);
strFstFieldType:= copy(strTemp, 1, pos(Depart,strtemp) - 1); //获得首字段类型
while not SeekEof(TextFileVar) do
begin
Readln(TextFileVar,strtemp);
//得到标记数
intLen := Length(trim(strtemp));
intNum := 0;
for i := 1 to intLen do
if Copy(strtemp, i, 1) = Depart then
intNum := intNum + 1; //数据表列数
if pos(Depart,strtemp) > 0 then
begin
temDataSet.Append;
for j :=0 to intnum-1 do
begin
temDataSet.Fields[j].AsString:=copy(strTemp, 1, pos(Depart,strtemp) - 1);
strtemp:= copy(strtemp, pos(Depart, strtemp) + 1, length(strtemp) - pos(Depart, strtemp));
end
end
else begin
temDataSet.Fields[j].AsString := copy(strTemp, 1, length(strtemp));
end
end;
closefile(textfilevar);
DataLoad:=temDataSet;
end;