您的位置:程序门 -> vb -> 数据库(包含打印,安装,报表)



vb 中,mshflexgrid1 控件的“漏洞”问题!


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


vb 中,mshflexgrid1 控件的“漏洞”问题!
发表于:2008-02-27 18:55:25 楼主
我在vb6.0   中,使用ado访问sql   server   2000,数据控件使用mshflexgrid,但在应用过程中发现mshflexgrid控件存在缺陷。具体表现为当数据集的记录数太多时,比如10000条记录,mshflexgrid无法完全显示出来,只能显示500多条,我不知道是ado的问题还是mshflexgrid控件的问题,总之在我的程序中会出现这种情况。下面我将我的代码拿出来,给大家看看是哪里出了毛病:  

private   sub   command1_click()  
on   error   goto   errhap  
dim   conn   as   new   adodb.connection  
dim   rs   as   new   adodb.recordset  
dim   connstr   as   string  
connstr   =   "driver={sql   server};server=myserver;uid=sa;pwd=123456;database=mydatabase"  

conn.open   connstr  

rs.open   "select   *   from   t1   order   by   in_id",   conn  
set   mshflexgrid1.datasource   =   rs  
rs.close  
conn.close  
exit   sub  
errhap:  
msgbox   err.description  
exit   sub  
end   sub  

在以上的代码中,t1是sql   server中的一个表,其记录数超过10000条。  
当程序运行的时候,没有错误,但是mshflexgrid1这个控件显示出来的记录就只得500多条,访问t1的时候,我也没有使用where   语句过滤记录,理论上说,应该可以显示出来10000条记录的,但就是不行,不知是什么原因?  
ado   我引用的是   2.8版本的library,这么新的版本,应该不会有毛病。  

我怎么弄都弄不出原因。为此,我不使用ado.recordset,改用控件adodc作为记录集,重新试了一遍,代码如下:  
adodc1.connectionstring   =   connstr  
adodc1.recordsource   =   "select   *   from   t1   order   by   in_id"  
set   mshflexgrid1.datasource   =   adodc1  
adodc1.refresh  
但出来的结果也是只有2000多条,mshflexgrid1   没有显示出来预计的1万条记录。我更加感到奇怪了!!!!!!!  

最后我没有办法了,将mshflexgrid1控件改成   datagrid控件,使用adodc控件作为数据集,奇迹出现了!!可以显示10000条记录了!!!!!!!  

但这不是我要的结果,因为datagrid这个控件太单调了,不好看,而且功能少,不能达到程序的要求。我要的是用mshflexgrid1控件来做程序,  
以上的都是真实的,请大家找找mshflexgrid1控件不能显示所有查询记录的原因是什么?????感激涕零!!!!!
发表于:2008-02-27 19:04:401楼 得分:0
安装vb6sp5就可以了
发表于:2008-02-27 19:08:072楼 得分:0
这个是vb的问题还是   ado的问题?安装vb6   sp5真的可以解决问题吗?还有,sp5哪里有得下载呢?
发表于:2008-02-27 19:42:383楼 得分:0
请大家救救我!!
发表于:2008-02-27 19:59:214楼 得分:0
网上搜索vs6sp5vb.exe
发表于:2008-02-27 21:35:585楼 得分:0
我想这个肯定是vb   mshflexgrid的缺陷来的,我刚刚在不同的电脑重新试了一次(没有打补丁),结果,如果用ado.recordset的话,mshflexgrid也只是显示522条记录,无法显示表的1万条记录!!!!!!!
发表于:2008-02-28 08:54:466楼 得分:0
这是   microsoft   visual   basic   6.0   enterprise   edition   的一个   bug。   visual   studio   6.0   service   pack   3   改正了此问题。

另外一种绕过   bug   的方法是用记录集对象的   getstring   方法和   mshflexgrid   的   clip   粘贴方法:
vbscript code
dim cn as new adodb.connection dim rs as new adodb.recordset dim rsvar as variant dim i as integer cn.open "testing" '<-- your dsn rs.open "select * from cies", cn, adopenstatic, adlockoptimistic rs.movelast rs.movefirst ' assuming that rs is your ado recordset mshflexgrid1.rows = rs.recordcount + 1 rsvar = rs.getstring(adclipstring, rs.recordcount) mshflexgrid1.cols = rs.fields.count ' set column names in the grid for i = 0 to rs.fields.count - 1 mshflexgrid1.textmatrix(0, i) = rs.fields(i).name next mshflexgrid1.row = 1 mshflexgrid1.col = 0 ' set range of cells in the grid mshflexgrid1.rowsel = mshflexgrid1.rows - 1 mshflexgrid1.colsel = mshflexgrid1.cols - 1 mshflexgrid1.clip = rsvar ' reset the grid's selected range of cells mshflexgrid1.rowsel = mshflexgrid1.row mshflexgrid1.colsel = mshflexgrid1.col rs.close set rs = nothing cn.close set cn = nothing




快速检索

最新资讯
热门点击