起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 574|回复: 13

【结贴】自定义数据集中用代码增加的数据字段不能使用

[复制链接]
发表于 2010-8-9 18:38:19 | 显示全部楼层 |阅读模式
我在业务信息中定义好的自定义数据集中用代码增加了一个字段,代码如下:
          lBizField := TUserDataField.Create(dsbStatisResult.DataSet); //创建用户数据字段
          lBizField.DataSet := TUserDataSet(dsbStatisResult.DataSet);                //指定字段所在的数据集
          lBizField.ID := 'HCOL';                             //设置字段ID
          lBizField.DataType := TDataType.dtString;        //设置字段类型
          lBizField.Size := 64;                             //设置字段大小
          lBizField.DisplayName := '统计指标';    //设置字段显示名称
          InfoBroker.Info.RefreshList;

在下面我用代码赋值:
dsbStatisResult.DataSet.FieldByName('HCOL').AsString:='111';
提示HCOL字段不存在,这是为什么呢
回复

使用道具 举报

 楼主| 发表于 2010-8-10 09:48:09 | 显示全部楼层
能不能赶紧看一下是什么原因,着急用呢
回复 支持 反对

使用道具 举报

发表于 2010-8-10 09:56:54 | 显示全部楼层
楼主看一下 dsbStatisResult.DataSet.active 是啥?false还是true?
回复 支持 反对

使用道具 举报

发表于 2010-8-10 10:02:47 | 显示全部楼层
完整 参考代码(建议 自定义数据集 本身也是动态创建的方式):
var
  lBizField: TBizField;
  FUserDataSet : TUserDataSet;//最好不要在这里定义,只是为了简单
begin
  if (FUserDataSet = nil) then
  begin
    FUserDataSet := TUserDataSet.Create(self);      //创建自定义数据集
    try
      FUserDataSet.ID := 'UserDataSet1';               //设置自定义数据集ID
      lBizField := TUserDataField.Create(FUserDataSet);
        //创建用户数据字段
      lBizField.DataSet := FUserDataSet;      //指定字段所在的数据集
      //RefreshList; //刷新信息列表,当要访问创建数据集的ID时,就需要刷新,
      lBizField.ID := 'KF';                            //设置字段ID
      lBizField.DataType := TDataType.dtString;          //设置字段类型
      lBizField.Size := 32;                            //设置字段大小
      lBizField.DisplayName := '库房';                 //设置字段显示名称
    except
      FUserDataSet.Free;
      FUserDataSet := nil;
      raise;
    end;
    DTTJL_ZDYSJJ.TDTTJLWG(DocViewDTTJL_ZDYSJJ_DTTJLWG.Doc).DataGrid.DataSource.DataSet := FUserDataSet;
    FUserDataSet.Open;
    FUserDataSet.Append;
    FUserDataSet.FieldByName('kf').AsString := '1';
  end
  else
    Dialogs.ShowMessage('自定义数据集不能被创建');
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-10 10:03:19 | 显示全部楼层
用代码增加自定义字段时,数据集是打开的
回复 支持 反对

使用道具 举报

发表于 2010-8-10 10:30:45 | 显示全部楼层
请楼主参考4楼。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-10 15:39:13 | 显示全部楼层
你在过程中动态创建自定义数据集后,用你的代码是可以的,我的自定义数据集是在业务信息中定义的,在代码中追加字段,就不行,这是为什么呢
回复 支持 反对

使用道具 举报

发表于 2010-8-10 16:28:28 | 显示全部楼层
你的意思在业务信息下创建一个自定义数据集,然后代码创建字段,给字段赋值不行,我测试是可以的,

你是怎么知道数据集是打开着的,在赋值前open一下数据集,然后看看呢

我的代码参考如下

var
  lBizField: TBizField;
begin
  lBizField := TUserDataField.Create(DataSetBroker1.DataSet); //创建用户数据字段
  lBizField.DataSet := TUserDataSet(DataSetBroker1.DataSet);                //指定字段所在的数据集
  lBizField.ID := 'HCOL';                             //设置字段ID
  lBizField.DataType := TDataType.dtString;        //设置字段类型
  lBizField.Size := 64;                             //设置字段大小
  lBizField.DisplayName := '统计指标';    //设置字段显示名称
  if DataSetBroker1.DataSet.active= false then
     DataSetBroker1.DataSet.open;
  DataSetBroker1.DataSet.append;
  DataSetBroker1.DataSet.FieldByName('HCOL').AsString:='1';
  dialogs.ShowMessage(DataSetBroker1.DataSet.FieldByName('HCOL').AsString);
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-11 17:50:44 | 显示全部楼层
下面是我的代码,在dsbStatisResult打开后,程序运行到
dsbStatisResult.DataSet.FieldByName('HCOL').AsString:='1';
时,出现错误提示:字段HCOL不存在,这是什么原因呢

procedure TMainForm.UpdateStatisDataSet2();
var
  lBizField: TBizField;
begin
  lBizField := TUserDataField.Create(dsbStatisResult.DataSet); //创建用户数据字段
  lBizField.DataSet := TUserDataSet(dsbStatisResult.DataSet);                //指定字段所在的数据集
  lBizField.ID := 'HCOL';                             //设置字段ID
  lBizField.DataType := TDataType.dtString;        //设置字段类型
  lBizField.Size := 64;                             //设置字段大小
  lBizField.DisplayName := '横栏';    //设置字段显示名称
  //jsDialogs.ShowMsg(TUserDataSet(dsbStatisResult.DataSet).UserFieldCount,'');
  if dsbStatisResult.DataSet.active= false then
  dsbStatisResult.DataSet.open;
  //dsbStatisResult.DataSet.FieldCount;
  dsbStatisResult.DataSet.append;
  dsbStatisResult.DataSet.FieldByName('HCOL').AsString:='1';
  dialogs.ShowMessage(dsbStatisResult.DataSet.FieldByName('HCOL').AsString);
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-8-11 17:54:24 | 显示全部楼层
补充一下,在添加字段前,dsbStatisResult是关闭的
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-7 18:08 , Processed in 0.043347 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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