起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 301|回复: 17

数据量大出现卡机问题

[复制链接]
发表于 2010-4-13 08:49:08 | 显示全部楼层 |阅读模式
现有数据集 TSQLDATASET : A ,B,2个 A是B的主表 一对多关系,另有TUSERDATASET : C,C里有N多临时字段。
执行如下代码时如果数据量少,没问题,数据量多时就卡机了

if A.DataSet.IsEmpty then exit;
  A.DataSet.First;
  C.DataSet.CancelUpdates;
  C.DataSet.Append;
  while not A.DataSet.Eof do
  begin
    IF B.DataSet.IsEmpty THEN continue;
    B.DataSet.First;
    WHILE NOT B.DataSet.Eof DO
    BEGIN

      if (C.DataSet.FieldDefs.IndexOf(B.DataSet.FieldByName('SHFT_INDX_CD').AsString)>=0) and (not B.DataSet.FieldByName('SHFT_INDX_VAL').IsNull) then
      begin
        try
          C.DataSet.FieldByName(B.DataSet.FieldByName('SHFT_INDX_CD').AsString).AsInteger :=
          C.DataSet.FieldByName(B.DataSet.FieldByName('SHFT_INDX_CD').AsString).AsInteger + B.DataSet.FieldByName('SHFT_INDX_VAL').AsInteger;

        except

        end;
      end;
      B.DataSet.Next;

    END;

    A.DataSet.Next;

  end;
  C.DataSet.Post;
回复

使用道具 举报

 楼主| 发表于 2010-4-13 08:54:10 | 显示全部楼层
数据量大时,外层循环A.DataSet.Next; 执行完所有数据后,就卡机了,不执行C.DataSet.Post;
回复 支持 反对

使用道具 举报

发表于 2010-4-13 09:23:26 | 显示全部楼层
你间隔100条,post一次试试。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-13 09:29:37 | 显示全部楼层
如何 间隔100条 测试?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-13 09:36:25 | 显示全部楼层
和100条有关系吗?  我C数据集就是1条数据累加而已
回复 支持 反对

使用道具 举报

发表于 2010-4-13 09:48:33 | 显示全部楼层
抱歉没看清楚。
回复 支持 反对

使用道具 举报

发表于 2010-4-13 09:56:06 | 显示全部楼层
我仔细看了下逻辑,c表的字段数目和b表记录数有关系。
c数据集的字段是不是过多了?
如果这样,能不能先不用数据集,用array或者list先去处理?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-13 09:59:55 | 显示全部楼层
C表字段名称 和 B表数据记录 有关系

C数据集的临时字段是很多
回复 支持 反对

使用道具 举报

发表于 2010-4-13 10:15:39 | 显示全部楼层
我仔细看了下逻辑,c表的字段数目和b表记录数有关系。
c数据集的字段是不是过多了?
如果这样,能不能先不用数据集,用array或者list先去处理?
既然看到了字段过多出现卡机的现象,那就不要这样用自定义数据集了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-13 10:42:25 | 显示全部楼层
我要用表格显示出来 C 数据集的汇总值 不用数据集的话还有什么方法?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-9 20:49 , Processed in 0.046904 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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