起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: 刺青

【结贴】自定义数据集的问题(急)**

[复制链接]
发表于 2007-10-25 10:26:16 | 显示全部楼层
//清除字段
var
  i : Integer;
begin
  for i := 0 to TUserDataSet(DataSetBroker2.DataSet).UserFieldCount - 1 do
    TUserDataSet(DataSetBroker2.DataSet).UserFields[0].Free;
end;     
//添加字段
var
  lBizField : TBizField;
begin
  with TUserDataSet(DataSetBroker2.DataSet) do
  begin
      lBizField := TUserDataField.Create(TUserDataSet(DataSetBroker2.DataSet)); //创建用户数据字段
      lBizField.DataSet := TUserDataSet(DataSetBroker2.DataSet);                //指定字段所在的数据集
      lBizField.ID := 'KF';                             //设置字段ID
      lBizField.DataType := TDataType.dtString;        //设置字段类型
      lBizField.Size := 32;                             //设置字段大小
      lBizField.DisplayName := '库房';                  //设置字段显示名称
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-25 11:51:14 | 显示全部楼层
DataSetZHSJJ.First;
     while not DataSetZHSJJ.Eof do
     begin
       try
             lBizField := TUserDataField.Create(DataSetZDYSJJ1);
             lBizField.DataSet := DataSetZDYSJJ1;
             lBizField.ID := DataSetZHSJJ.FieldByName['KMXX_PYM'].AsString;
             lBizField.DataType := TDataType.dtNumber;
             lBizField.DisplayName := DataSetZHSJJ.FieldByName['KMXX_KMQM'].AsString;
          except
                DataSetZDYSJJ1.Free;
                DataSetZDYSJJ1 := nil;
                raise;
          end;
          DataSetZHSJJ.Next;
     end;

上面这样子添加字段可以吗?


删除字段这样子写没有错吧?
//清除字段
     for j := 3 to TUserDataSet(DataSetZDYSJJ1).UserFieldCount - 1 do
     begin
         TUserDataSet(DataSetZDYSJJ1).UserFields[j].Free;
     end;
但是,我删除字段的时候出错,如下图:

1233.jpg

11.97 KB, 下载次数: 158

回复 支持 反对

使用道具 举报

发表于 2007-10-25 13:27:43 | 显示全部楼层
.....
你从3开始的,你看看UserFieldCount 有多少个。
你这个超出范围了。应该从几开始,你调试着就能看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-26 10:11:16 | 显示全部楼层
procedure TZDRSKTJXX.DataSetDLSJJAfterOpen(DataSet: TDataSet);
var
   i,j : integer;
   s : string;
begin
     DataSetZHSJJ.Open;

     //清除字段
     Business.Forms.Dialogs.ShowMessage(SysUtils.IntToStr(TUserDataSet(DataSetZDYSJJ1).UserFieldCount));
     for j := 0 to TUserDataSet(DataSetZDYSJJ1).UserFieldCount-1 do
     begin
         TUserDataSet(DataSetZDYSJJ1).UserFields[j].Free;
     end;

     lBizField := TUserDataField.Create(DataSetZDYSJJ1);
     lBizField.DataSet := DataSetZDYSJJ1;
     lBizField.ID := 'ZYBH';
     lBizField.DataType := TDataType.dtString;
     lBizField.Size := 32;
     lBizField.DisplayName := '职员编号';

     lBizField := TUserDataField.Create(DataSetZDYSJJ1);
     lBizField.DataSet := DataSetZDYSJJ1;
     lBizField.ID := 'ZYQM';
     lBizField.DataType := TDataType.dtString;
     lBizField.Size := 32;
     lBizField.DisplayName := '职员全名';

     lBizField := TUserDataField.Create(DataSetZDYSJJ1);
     lBizField.DataSet := DataSetZDYSJJ1;
     lBizField.ID := 'SKZE';
     lBizField.DataType := TDataType.dtNumber;
     lBizField.DisplayName := '收款总额';

     DataSetZHSJJ.First;
     while not DataSetZHSJJ.Eof do
     begin
          //动态创建自定义数据集的字段
          try
             lBizField := TUserDataField.Create(DataSetZDYSJJ1);
             lBizField.DataSet := DataSetZDYSJJ1;
             lBizField.ID := DataSetZHSJJ.FieldByName['KMXX_PYM'].AsString;
             lBizField.DataType := TDataType.dtNumber;
             lBizField.DisplayName := DataSetZHSJJ.FieldByName['KMXX_KMQM'].AsString;
          except
                DataSetZDYSJJ1.Free;
                DataSetZDYSJJ1 := nil;
                raise;
          end;
          DataSetZHSJJ.Next;
     end;
     DataSetZDYSJJ1.Open;
end;

我测了好久了,都没测出来,为什么老是超出范围!是不是代码写错了?帮我看一下,谢谢
回复 支持 反对

使用道具 举报

发表于 2007-10-26 11:14:20 | 显示全部楼层
你看看那个dataset有多少个,为什么超出了?
代码我看不出来
lBizField := TUserDataField.Create(DataSetZDYSJJ1);
把改成
lBizField := TUserDataField.Create(nil);
或者 lBizField := TUserDataField.Create(信息);
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-26 16:16:44 | 显示全部楼层
TUserDataSet(DataSetZDYSJJ1).UserFields[j].Free;
原来是错在这里:我把 0 写成 j 了.

我想问下,怎么样才能清除自定义数据集里的记录.
把字段清除了,数据集中的数据好像没清除.
回复 支持 反对

使用道具 举报

发表于 2007-10-26 16:23:01 | 显示全部楼层
DataSetZDYSJJ1.EmptyDataSet
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-26 16:34:24 | 显示全部楼层
谢谢shangxy,lixy and atiger
现在可以结贴了
回复 支持 反对

使用道具 举报

发表于 2007-10-26 16:39:36 | 显示全部楼层
ok,谢谢反馈
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 05:40 , Processed in 0.043734 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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