起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 249|回复: 5

【结】userdataset动态创建多列**

[复制链接]
发表于 2008-3-28 11:11:17 | 显示全部楼层 |阅读模式
//*********创建5列*********      
for i:=0 to 4 do
begin
           lBizField.ID := SysUtils.inttostr(i);                            //设置字段ID
           lBizField.DataType := TDataType.dtString;          //设置字段类型
           lBizField.Size := 32;                            //设置字段大小
           lBizField.DisplayName :=Query1.FieldByName['gsdm'].AsString;
           dialogs.ShowMessage(SysUtils.IntToStr(i));
end;
DataSetZDYSJJ.Open;
//*********分别给每列赋值*********   
for i:=0 to 4 do
begin
             DataSetZDYSJJ.Append;
             DataSetZDYSJJ.Fields.AsString:=query1.FieldByName['qymc'].AsString;
end;

以上的代码报错,报错的地方是DataSetZDYSJJ.Fields.AsString:=query1.FieldByName['qymc'].AsString;
里面的i越界。是不是自定义数据集每次只能生成一列啊?
回复

使用道具 举报

发表于 2008-3-28 13:27:47 | 显示全部楼层
是不是自定义数据集每次只能生成一列啊?
不是,

以上的代码报错,越界。?
啥错误,把原始错误帖出来看看,
回复 支持 反对

使用道具 举报

 楼主| 发表于 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;
回复 支持 反对

使用道具 举报

发表于 2008-4-1 11:38:29 | 显示全部楼层
在过滤的时候他会多一条记录出来
怎么过滤的?过滤前显示正确的?

另外,把界面帖出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-1 14:22:18 | 显示全部楼层
你知道什么原因
我杂DataSetZDYSJJ.Open;加了delete几没有问题了
回复 支持 反对

使用道具 举报

发表于 2008-4-1 14:47:50 | 显示全部楼层
ok
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 13:58 , Processed in 0.040560 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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