VB与DB2(V8.1)连接,用DATAGRID显示选定的数据库表或SQL查询的结果。我选择较小的表时,没有任何问题。但是在查询较大的表时(600M或更大),出现“由于中断,处理被取消”或“行集体不能作为标签”的错误提示,或者DATAGRID控件显示窗体没有任何显示。我想请问:1.这种错误是否是由于结果集不能正确产生引起的(ExecuteComplete事件完成后,结果集的RECORDCOUNT为-1)?2.是由于控件不支持大的结果集?3.是否需要异步操作实现?这种方法编程的要点是什么?需要哪些主要的代码?请各位一定帮助解决。万分感谢。

解决方案 »

  1.   

    “由于中断,处理被取消”或“行集体不能作为标签”的错误比较容易解决,主要是对于大结果集DATAGRID控件显示窗体没有任何显示的问题,请高手们帮忙啊。
      

  2.   

    现在问题变为查询可以进行,但服务器在操作,而客户机端网卡没有闪,RECORDCOUNT为-1,即不能将结结果返回,为什么?各位兄、弟,请帮忙啊。
      

  3.   

    我也没用过DB2,没直接用过,SAP的ABAP开发用的是DB2,不过这语言是和数据库无关的。只有分析一下:小数据可以返回数据,说明连接查询都没问题,600M的大表出错,你不会是一次查询所有记录吧。还有就是一条记录的字段数是不是太多,比如上千个字段,我在SAP中就看到这么恐怖的表。试着将rs.cachesize加大试试:比如:rs.cachesize = 30   '一次读入30条记录到内存rs.open
      

  4.   

    用大数据集是不是象死了机一样。
    “由于中断,处理被取消”
    可能是由于程序还在运行时你关闭应用,因为那么大的数据量不会一时半刻就能搜索好的。
    “行集体不能作为标签”
    可能是DATAGRID受不了如此多的记录,DATAGRID也有个上限。
      

  5.   

    adodc 和 datagrid以前也用过,现在改用ado和lvwview了
    不过到现在也没有做过像楼主说的那么大的数据库,最多的一个表也才以十万计算而已,所以对大型表的操作也没有经验,不好意思,帮不上什么忙...(600M...,我的内存才128M)
      

  6.   

    不知道 为什么!可能ADO的PAGE设置有问题吧!
      

  7.   

    先不将rs赋给dagagrid.Datasource,写一个从头遍历的程序,用timer记录一下时间,如果很短的话,说明是DataGrid和ADO的配合问题。而你用ADODC控件又可以,那可能参考一下ADODC的属性,如CacheSize = 50,
    CusorLocation = adUserClient
    CursorType, LockType,...,等等,相应改变ado的对应属性。
      

  8.   

    这么大的数据量没做过用DELPHI做试试
      

  9.   

    对不起哦,我对于这样大的表也没什么经验,也找不到这样的表试不过问题我有我的看法,如果错了,请各位指点我觉得:
            1.不能显示数据是由于控件的缓冲区溢出了,我是根据list控件来判断的,可能大家都试过,不停的添加数据产生的结果就是溢出,报错。数据库控件可能就是读取数据库时读到某些值就溢出,根本无法继续读数据的内容了。        2.好象vb里很多的控件都会溢出,都是控件本身的问题,实在是太简陋了。        3.我不知道怎么解决问题,但是我有个建议,想别的方法或者用别的控件获取选定的数据库表或SQL查询的结果,再用其他控件显示出来,我觉得数据库表太大了,控件只读几个跟数据库内容无关的数据就会溢出,根本无法继续下去,甚至可能在获取到需要显示多少个数据时就超过可接受的范围了。
      

  10.   

    我没用过DB2
    可是我知道你的那个Recordset是有一点太大了600M!