100分求MSHFlexGrid控件的问题,着急啊,请各位老大救命啊~!

it_zhongguoren 2007-12-26 08:46:07
rs.Open "execute 存储1", con, 1, 3
Set MSHFlexGrid1.DataSource =rs
为什么显示的数据显示不完整的,还有一些没有显示出来?
我用msgbox rs.RecordCount是显示的是-1,但是我在查询分析器中有900多的记录显示,而显示在控件上的只有800,这个是怎么回事啊,我查询出来的数据的列是每次都变的,不是固定,下载到EXECL中只能依靠MSHFlexGrid了,但是MSHFlexGrid又显示不全,这怎么办啊?我的内存是512的,求各位老大给一个解决的办法啊,或是怎么解决MSHFlexGrid的显示问题。万分感谢啊!!很着急 啊!!!!!!!!!!!1
...全文
121 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
it_zhongguoren 2007-12-26
  • 打赏
  • 举报
回复
为什么用这样的语句就能全部显示呢?
sql = "execute 存储1"
Adodc1.ConnectionString = con
Adodc1.RecordSource = sql
Set MSHFlexGrid1.DataSource = Adodc1
Adodc1.Refresh
这样是OK的
vbman2003 2007-12-26
  • 打赏
  • 举报
回复
我的测试代码:



Dim str
str = "Provider = SQLOLEDB.1;Persist Security Info = False;" & _
"User ID = sa;Password = 123;Data Source = 212.118.1.179;" & _
"Initial Catalog = YSLH"
Set cn = New ADODB.Connection
'cn.CursorLocation = adUseClient
cn.Open str

Set cmd = New ADODB.Command
Set rs = New ADODB.Recordset

cmd.ActiveConnection = cn
cmd.CommandText = "select_trans_info"
cmd.CommandType = adCmdStoredProc

Set param = cmd.CreateParameter("@lh_name", adChar, adParamInput, 20, Trim("353"))
cmd.Parameters.Append param

Set rs = cmd.Execute
Set fg.DataSource = rs
Debug.Print rs.RecordCount
Debug.Print fg.Rows - 1
Set cmd = Nothing
Set rs = Nothing
Set cn = Nothing

'其中fg是MSHFlexGrid控件
'注释掉cn.CursorLocation = adUseClient 结果:
-1
1701
'不注释掉cn.CursorLocation = adUseClient 结果:
1701
1701

vbman2003 2007-12-26
  • 打赏
  • 举报
回复
MSHFlexGrid1无需设置rs.CursorLocation=adUseClient,这个大家可以测试
因为MSHFlexGrid1不须要绑定rs,也就是所谓离线式表格控件,对其中数据的编辑,不会影响rs,同样给其赋值后关闭rs
也不会影响其数据的正常显示。所以如果你不要编辑数据,可以用服务器端游标,高效的返回数据,用MSHFlexGrid1显示。
这就是其与DataGrid控件的不同之处,这是个在线式的表格控件,对其的修改直接影响到rs,同样它也离不开rs,显示过程不能关闭rs.正因为它是完全的客户端行为,所以必须设置rs.CursorLocation=adUseClient
guyehanxinlei 2007-12-26
  • 打赏
  • 举报
回复
楼主程序的问题最有可能是出在游标上,与控件的使用关系不大,我只是推荐VSFlexGrid控件,该插件是ComponentOne Studio Enterprise 中的一个,功能比MSHFlexGrid强大的多。http://lib.verycd.com/2007/03/15/0000143145.html可以下载得到。
bbhere 2007-12-26
  • 打赏
  • 举报
回复
游标问题
rs.CursorLocation=adUseClient
it_zhongguoren 2007-12-26
  • 打赏
  • 举报
回复
我用的是VB6。没有VSFLEXGRID啊
guyehanxinlei 2007-12-26
  • 打赏
  • 举报
回复
rs.CursorLocation = adUseClient是需要加上的;
绑定不好用的话可一行行的添加进去,效果还算可以。
VSFlexGrid也是不错的表格控件,功能远大于MSHFlexGrid
vbman2003 2007-12-26
  • 打赏
  • 举报
回复
另外如果你要返回rs.RecordCount,就要设置客户端游标cn.CursorLocation = adUseClient
默认情况下是服务器端游标,性能更好点,但不返回rs.RecordCount
vbman2003 2007-12-26
  • 打赏
  • 举报
回复
用MSHFlexGrid1控件无须返回rs.RecordCount值
这个方法rs.Open "execute 存储1",con,1,3 我认为是不适当的,试试:
set rs=cn.execute("存储1")

it_zhongguoren 2007-12-26
  • 打赏
  • 举报
回复
但是我自己也没有想明白是为什么,晕,呵呵
it_zhongguoren 2007-12-26
  • 打赏
  • 举报
回复
sql = "execute 存储1"
Adodc1.ConnectionString = con
Adodc1.RecordSource = sql
Set MSHFlexGrid1.DataSource = Adodc1
Adodc1.Refresh
我已经自己装载完了。上面的代码可以
我刚刚试了一下,这样是可以完全装载的,不知道是什么原因大家分析一下啊!
jwh2004 2007-12-26
  • 打赏
  • 举报
回复
rs.Open语句前加“rs.CursorLocation = adUseClient”一句就可使rs.RecordCount得到正确的值。
it_zhongguoren 2007-12-26
  • 打赏
  • 举报
回复
装不了SP6啊
饮水需思源 2007-12-26
  • 打赏
  • 举报
回复
安装VB6SP5,将存储过程的查询结果写到一临时表,程序再从临时表读取并显示到mshflexgrid控件
it_zhongguoren 2007-12-26
  • 打赏
  • 举报
回复
是啊,我以前也是那样写的,呵呵
散分咯
vbman2003 2007-12-26
  • 打赏
  • 举报
回复
不用Adodc1控件,这个问题不清楚
不过看上去这个代码应该是合理的,是用Adodc1的连接对象返回数据的
和你的rs.open方式不同的


我测试了一下,用set rs=cn.execute("存储名称 参数"),这样完全没问题

1,453

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧