起步软件技术论坛-X3

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

【结帖】[问题]关于数据集的问题**

[复制链接]
发表于 2007-9-18 01:32:58 | 显示全部楼层 |阅读模式
1.一个数据集最大可以插入几条数据?

2.当数据集中已经插入了6百多条数据后,再从另一个数据集向该数据集插入数据时,插入第一条数据没问题,当插入第二条数据的时候会提示错误:dataset not in edit or inser model.

3.如果当数据集插入2,3十条数据后,再从另一个数据集向该数据集插入6百条数据就不会有错误, 只是时间慢.
yangxiaorongking@21cn.com
回复

使用道具 举报

发表于 2007-9-18 08:45:52 | 显示全部楼层
1.一个数据集最大可以插入几条数据?
------------------------------------------------------------------
数据集可以插入任意多条数据,只是一次操作的数据量大小会影响其性能而以
2.当数据集中已经插入了6百多条数据后,再从另一个数据集向该数据集插入数据时,插入第一条数据没问题,当插入第二条数据的时候会提示错误:dataset not in edit or inser model.
------------------------------------------------------------------
这个不知道楼主怎么操作的,但从提示来看,应该是说数据集没有在编辑或者插入状态。
批量处理数据时的例子一般如下:
for i := 0 to 1000 do
begin
    DataSet.Append;
    DataSet.FieldByName('zd').AsInteger := i;
    DataSet.Post;
end;
3.如果当数据集插入2,3十条数据后,再从另一个数据集向该数据集插入6百条数据就不会有错误, 只是时间慢.
------------------------------------------------------------------
这个应该也不会太慢的吧?当然了,数据量大的话,性能上肯定会受影响的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-19 17:10:08 | 显示全部楼层
2.当数据集中已经插入了6百多条数据后,再从另一个数据集向该数据集插入数据时,插入第一条数据没问题,当插入第二条数据的时候会提示错误:dataset not in edit or inser model.
------------------------------------------------------------------
我也是用循环做插入的呀. 注意:插入第一条数据没问题,当插入第二条数据(或第三条数据)的时候会提示错误:dataset not in edit or inser model.
回复 支持 反对

使用道具 举报

发表于 2007-9-19 17:13:25 | 显示全部楼层
您的代码贴一下。另外另一个数据集是不是和当前数据集有主从关系?
回复 支持 反对

使用道具 举报

发表于 2007-9-20 14:21:14 | 显示全部楼层
??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-21 17:27:59 | 显示全部楼层
DataSetCGYDYB.First;
   WHILE NOT DataSetCGYDYB.Eof DO
     BEGIN
       DataSetCPXXGLJ.Filter:='';
       DataSetCPXXGLJ.Filtered:=true;
       DataSetCPXXGLJ.Filter:='CPBH like '''+DataSetCGYDYB.FieldByName('DLBH').AsString+'%'' and CPBM is not null ';
       DataSetCPXXGLJ.Filtered:=true;
       DataSetCPXXGLJ.First;
       while not DataSetCPXXGLJ.Eof do
         begin
           if not DataSetZDYSJJ2.Locate('CPBH',[DataSetCPXXGLJ.FieldByName('CPBH').AsString],[]) then
             begin
               DataSetZDYSJJ2.Insert;
               //DataSetCPXXS.FieldByName('CPBM').Assign(DataSetCPXXGLJ.FieldByName('CPBM'));
               DataSetZDYSJJ2.FieldByName('CPBM').Assign(DataSetCPXXGLJ.FieldByName('CPBM'));
               DataSetZDYSJJ2.FieldByName('CPMC').Assign(DataSetCPXXGLJ.FieldByName('CPMC'));
               DataSetZDYSJJ2.FieldByName('GGXH').Assign(DataSetCPXXGLJ.FieldByName('GGXH'));
               DataSetZDYSJJ2.FieldByName('DW').Assign(DataSetCPXXGLJ.FieldByName('DW'));
               DataSetZDYSJJ2.FieldByName('CBJ').Assign(DataSetCPXXGLJ.FieldByName('CBJ'));
               DataSetZDYSJJ2.FieldByName('BHQ_Y_').Assign(DataSetCPXXGLJ.FieldByName('BHQ_Y_'));
               DataSetZDYSJJ2.FieldByName('BXQ_Y_').Assign(DataSetCPXXGLJ.FieldByName('BXQ_Y_'));
               DataSetZDYSJJ2.FieldByName('DQFLXS').Assign(DataSetCPXXGLJ.FieldByName('DQFLXS'));
               //DataSetZDYSJJ2.FieldByName('JJL').Assign(DataSetCPXXGLJ.FieldByName('JJL'));
               //DataSetCPXXS.FieldByName('BZ').Assign(DataSetCPXXGLJ.FieldByName('BZ'));
               DataSetZDYSJJ2.FieldByName('ZDKCS').Assign(DataSetCPXXGLJ.FieldByName('ZDKCS'));
               DataSetZDYSJJ2.FieldByName('SD').Assign(DataSetCPXXGLJ.FieldByName('SD'));
               DataSetZDYSJJ2.FieldByName('CPBH').Assign(DataSetCPXXGLJ.FieldByName('CPBH'));
               DataSetZDYSJJ2.FieldByName('SJBM').Assign(DataSetCPXXGLJ.FieldByName('SJBM'));
               DataSetZDYSJJ2.Post;
               //dialogs.ShowMessage( sysutils.IntToStr(DataSetCPXXS.RecordCount));
             end;
           DataSetCPXXGLJ.Next;
         end;
       DataSetCPXXGLJ.Refresh;
       DataSetCGYDYB.Next;
     END;
   //DataSetCPXXS.Refresh;
  //dialogs.ShowMessage( sysutils.IntToStr(DataSetZDYSJJ2.RecordCount));
  DataSetCPXXS.Filter:='CPBM is null ';
  DataSetCPXXS.Filtered:=true;
  DataSetCPXXS.First;
  while not DataSetCPXXS.Eof do
    begin
       DataSetZDYSJJ2.Insert;
       DataSetZDYSJJ2.FieldByName('CPMC').Assign(DataSetCPXXS.FieldByName('CPMC'));
       DataSetZDYSJJ2.FieldByName('CPBH').Assign(DataSetCPXXS.FieldByName('CPBH'));
       DataSetZDYSJJ2.FieldByName('SJBM').Assign(DataSetCPXXS.FieldByName('SJBM'));
       DataSetZDYSJJ2.Post;
       DataSetCPXXS.Next;
    end;
--------------------------------------------------------
DataSetZDYSJJ2是自定义数据集,上面的循环结束的时候该数据集里有2~3十条数据;
DataSetCPXXS是标准数据集,该数据集里有6百多条数据;
这样加没问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-9-21 17:31:40 | 显示全部楼层
DataSetCPXXS.Filter:='CPBM is null ';
  DataSetCPXXS.Filtered:=true;
//这时数据集里有6百多条数据;
  DataSetZDYSJJ2.First;//该自定义数据集中有2~3十条数据
  while not DataSetZDYSJJ2.Eof do
    begin
      DataSetCPXXS.Insert;
      //DataSetCPXXS.FieldByName('CPBM').Assign(DataSetCPXXGLJ.FieldByName('CPBM'));
      DataSetCPXXS.FieldByName('CPBM').Assign(DataSetZDYSJJ2.FieldByName('CPBM'));
      DataSetCPXXS.FieldByName('CPMC').Assign(DataSetZDYSJJ2.FieldByName('CPMC'));
      DataSetCPXXS.FieldByName('GGXH').Assign(DataSetZDYSJJ2.FieldByName('GGXH'));
      DataSetCPXXS.FieldByName('DW').Assign(DataSetZDYSJJ2.FieldByName('DW'));
      DataSetCPXXS.FieldByName('CBJ').Assign(DataSetZDYSJJ2.FieldByName('CBJ'));
      DataSetCPXXS.FieldByName('BHQ_Y_').Assign(DataSetZDYSJJ2.FieldByName('BHQ_Y_'));
      DataSetCPXXS.FieldByName('BXQ_Y_').Assign(DataSetZDYSJJ2.FieldByName('BXQ_Y_'));
      DataSetCPXXS.FieldByName('DQFLXS').Assign(DataSetZDYSJJ2.FieldByName('DQFLXS'));
      //DataSetCPXXS.FieldByName('JJL').Assign(DataSetZDYSJJ2.FieldByName('JJL'));
      //DataSetCPXXS.FieldByName('BZ').Assign(DataSetCPXXGLJ.FieldByName('BZ'));
      DataSetCPXXS.FieldByName('ZDKCS').Assign(DataSetZDYSJJ2.FieldByName('ZDKCS'));
      DataSetCPXXS.FieldByName('SD').Assign(DataSetZDYSJJ2.FieldByName('SD'));
      DataSetCPXXS.FieldByName('CPBH').Assign(DataSetZDYSJJ2.FieldByName('CPBH'));
      DataSetCPXXS.FieldByName('SJBM').Assign(DataSetZDYSJJ2.FieldByName('SJBM'));
      DataSetCPXXS.Post;
      DataSetZDYSJJ2.Next;
    end;
---------------------------------------
问题就在这里:当循环执行到第二条或第三条时出错:dataset not in edit or inser model;
回复 支持 反对

使用道具 举报

发表于 2007-9-21 17:40:13 | 显示全部楼层
你可以这样调试一下
7楼代码注释掉一些
将从DataSetCPXXGLJ取值的注释掉,看看还出问题否出错
回复 支持 反对

使用道具 举报

发表于 2007-9-24 17:58:32 | 显示全部楼层
2楼的
DataSetZDYSJJ2.Next;
这句话去掉。
回复 支持 反对

使用道具 举报

发表于 2007-9-29 18:24:58 | 显示全部楼层
楼主,你的代码比较乱,另外效率肯定低
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-3 17:10 , Processed in 0.044536 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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