|

楼主 |
发表于 2008-4-1 11:21:33
|
显示全部楼层
这个问题解决了
不过我用DataSource_xssj.DataSet.Close; 然后在过滤的时候他会多一条记录出来.不知道是什么原应.
procedure TMainForm.aa(gl:string);
var
lBizField: TBizField;
zd:array of string;//字段名
i,k,j:integer;
begin
DataSource_xssj.DataSet.Close;
DataSetbzsjj.Close;
DataSetbzsjj.Open;
DataSetbzsjj.Filter:=gl;
DataSetbzsjj.Filtered:=true;
sl:=DataSetbzsjj.RecordCount;
for j := 0 to TUserDataSet(DataSetZDYSJJ).UserFieldCount-1 do
begin
TUserDataSet(DataSetZDYSJJ).UserFields[0].Free;
end;
setlength(zd,DataSetbzsjj.RecordCount);
try
lBizField := TUserDataField.Create(DataSetZDYSJJ);
lBizField.DataSet := DataSetZDYSJJ;
lBizField.ID := 'kf'; //设置字段ID
lBizField.DataType := TDataType.dtString; //设置字段类型
lBizField.Size := 32;
lBizField.DisplayName :=' ';
for i:=0 to zd.Length-1 do
begin
lBizField := TUserDataField.Create(DataSetZDYSJJ);
lBizField.DataSet := DataSetZDYSJJ;
lBizField.ID := SysUtils.inttostr(i); //设置字段ID
lBizField.DataType := TDataType.dtString; //设置字段类型
lBizField.Size := 32; //设置字段大小
lBizField.DisplayName :=DataSetbzsjj.FieldByName['gsdm'].AsString;
end;
DataSetZDYSJJ.Open;
for k:=0 to 1 do
begin
DataSetbzsjj.First;
DataSetZDYSJJ.Append;
DataSetZDYSJJ.Fields[0].AsString:=DataSetbzsjj.Fields[2+k].DisplayLabel;
for i:=0 to zd.Length-1 do
begin
DataSetZDYSJJ.Fields[i+1].AsString:=DataSetbzsjj.Fields[2+k].AsString;
DataSetbzsjj.Next;
end;
end; //设置字段显示名称
except
DataSetZDYSJJ := nil;
DataSetZDYSJJ.Free;
DataSetZDYSJJ.Close;
DataSetbzsjj.Close;
raise;
end;
end; |
|