起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 148|回复: 4

【结】UserField动态创建删除的问题**

[复制链接]
发表于 2008-5-30 10:46:35 | 显示全部楼层 |阅读模式
过程如下:
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;
每次执行的时候第一次可以,但是第二次总是报要创建的字段已存在,看来是字段没有清除干净,请问如何能完全清楚自定义字段
回复

使用道具 举报

发表于 2008-5-30 12:57:37 | 显示全部楼层
这个找一下论坛就能找到答案了
(目前只能通过动态创建或者释放用户数据集的方式来实现。)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-30 13:11:12 | 显示全部楼层
我查过了,以前帖子就是free一下,但是我是删除掉以后,再创建同名的字段,就报错,肯定是哪儿没释放
回复 支持 反对

使用道具 举报

发表于 2008-5-30 13:41:17 | 显示全部楼层
动态创建字段free不掉,需要你动态创建数据集free数据集的方式才可以。
看2楼说的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-5-30 14:54:54 | 显示全部楼层
解决了,结贴
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-14 04:38 , Processed in 0.039640 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表