我要向msflexgrid中写入大量数据,要求其中的某一栏不能出现重复的数据。我只好在additem之前判断msflexgrid中是否已经有了这个数据,如果没有,则添加;否则忽略。如果用for i=1 to msflexgrid1.rows-1这样的循环来做的话,效率实在是太差太差了。有没有什么好的解决办法呢?

解决方案 »

  1.   

    select distinct * from biao
    这样写sql语句
      

  2.   

    如果是从数据库中取出来的数据,在查询时过滤。如distinct
      

  3.   

    即使是从表里边来的,也没有办法过滤,因为有可能进行第二次写入。也就是说,在写完第一遍大量数据之后,还有可能从数据源读出另外一批数据写入msflexgrid中,而新写入的这批数据也不能跟原来已经写进msflexgrid的数据重复。So……我就头痛了。
      

  4.   

    建议还是从查询中过滤,比如用select ... from ..left join ... on ... where XX is null的形式。
      

  5.   

    数据库中建立一个中间(临时)表
    每次写FlexGrid前现将数据写入这个临时表
    1、清空FlexGrid
    2、select distinct * from TempTable
    3、写入FlexGrid
    搞定,而且速度快
      

  6.   

    如果能用select语句的话,我相信这个问题就不存在了。现在由于各种原因没有办法使用select语句,只能另外想办法。各种原因包括:1、数据来自远程服务器。除非在远程服务器上建立临时表,否则没有办法使用select语句。但是当数据增多以后,读取远端数据的开销也很大。
    2、数据在被添加到msflexgrid以前,已经作了一次处理。除非这次处理的结果也保存在远程服务器上,否则没有办法从远程服务器得到数据源。
    So……头越来越痛。
      

  7.   

    onlineboy(stame) 的方法比较好!
    如果在没有数据库的情况下,可以考虑用个哈希表来保存原来用过的数据。
      

  8.   

    ecivilian(抽象青年) 
    能否具体说一下“如果在没有数据库的情况下,可以考虑用个哈希表来保存原来用过的数据。”?
    我对vb远不如对sql熟悉,尤其是数据结构方面。
      

  9.   

    太简单了吧?
    做一个函数:
    function myfunc()
        on error resume next
        dim a as new collection    a.add 要加的数据,CStr(要加的数据)
    end function
    然后把a集合里的数据倒进表里就是了,速度非常快!