|
过程如下:
procedure CreateResultDataSet(ADataSetResult: TUserDataSet; AType: String;
ABeginDate,AEndDate: TDateTime);
var
lCount,i: integer;
lFieldTitle: string;
lFieldID: string;
lCaption: string;
begin
ADataSetResult.Close;
{此处我不能全部删除,因为前五个字段是固定的,我只是要动态创建和删除第六个以后的字段}
while ADataSetResult.UserFieldCount > 5 do
TUserDataSet(ADataSetResult).UserFields[5].Free;
{下面是动态创建字段}
if AType='D' then
begin
lCount:=Business.System.DateUtils.DaysBetween(ABeginDate,AEndDate);
lFieldTitle:='D';
end
else
begin
lCount:=Business.System.DateUtils.MonthsBetween(ABeginDate,AEndDate);
lFieldTitle:='M';
end;
for i:=0 to lCount do
begin
if AType='D' then
ADataSetResult.FieldDefs.Add(lFieldTitle+FormatDateTime('yyyymmdd',ABeginDate+i),
TFieldType.ftFloat, 0, False)
else
ADataSetResult.FieldDefs.Add(lFieldTitle+FormatDateTime('yyyymmdd',
SysUtils.IncMonth(ABeginDate,i)),TFieldType.ftFloat, 0, False);
with TUserDataField.Create(ADataSetResult) do
begin
DataSet := ADataSetResult;
if AType='D' then
begin
ID := lFieldTitle+FormatDateTime('yyyymmdd',ABeginDate+i);
DisplayName := FormatDateTime('yyyy-mm-dd',ABeginDate+i);
end
else
begin
ID := lFieldTitle+FormatDateTime('yyyymm',SysUtils.IncMonth(ABeginDate,i));
DisplayName := FormatDateTime('yyyy-mm',SysUtils.IncMonth(ABeginDate,i));
end;
DataType := TDataType.dtFloat;
EditStyleID := 'Number';
Size := 0;
DisplayFormat := '0.00';
end;
end;
ADataSetResult.CreateDataSet;
end;
每次执行的时候第一次可以,但是第二次总是报要创建的字段已存在,看来是字段没有清除干净,请问如何能完全清楚自定义字段 |
|