在线求助!MSFLEXGRID控件 显示远程数据库返回的记录集

爱我的人请呼吸 2009-08-18 08:54:21

  程序调用远程数据库存储过程返回的记录集,用(msflExgrid1.textmatrix(x,y)=***)的方式显示在MSFLXGRID控件

  本地测试一切正常

  远程测试的时候,程序从远程能正常获取记录集。用LISTBOX也能正常显示记录集中的记录,在这一块个人感觉应该是没有问题。

  但是远程测试时如果数据库返回的记录集内记录条数较多(几十条几百条都测试过)都能正常在MSFLEXGRID中显示

  如果记录数较少(十条左右或更少)在MSFLEXGRID控件内就不能显示了。不知道是什么原因?

  在这种情况下我在数据库服务器上用事件查看器看过,数据库的确是正常返回了记录集,

  在程序里加上LISTBOX也能正常显示获取的记录,但是就是就是不在MSFLEXGRID控件中显示

  望各位前辈高手能指点我操作的错误之处以及解决方法!万分感谢!

  附上我程序中将记录集写入到MSFLEXGRID控件的部分代码:

  

If not Rs.eof or Rs.bof then 'RS为从数据库返回的记录集
Do While Not (Rs.eof or Rs.bof)
With MFG
nr = MFG.Rows - 1
'产品信息
.TextMatrix(nr, 1) = rs!ID
.TextMatrix(nr, 2) = rs!kID
.TextMatrix(nr, 3) = rs!cID
.TextMatrix(nr, 4) = rs!uID
.TextMatrix(nr, 5) = rs!uClass
.Rows = .Rows + 1
.TopRow = .Rows - 1

List1.AddItem Trim(Rs!ID) '加上此行,在LIST1控件里能正常显示出此字段的信息,但是MSFLEXGRID不显示

DoEvents
End With
Doevents
Loop
End If
  
...全文
79 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
白发程序猿 2009-08-28
  • 打赏
  • 举报
回复
感觉下面代码有问题
If not Rs.eof or Rs.bof then 'RS为从数据库返回的记录集
Do While Not (Rs.eof or Rs.bof)
应该改为
if not (rs.eof and rs.bof) then
rs.movefirst
do whil not rs.eof
布衣散人 2009-08-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 systemx 的回复:]
  感谢楼上的

  因为我现在用的这个MSFLEXGRID控件并不是只为了显示记录集

  有几列是要根据读出来的记录处理以后再显示出处理以后的结果

  可能绑定记录集并不适合
[/Quote]

远程网络不稳,不应该用绑定
chinaboyzyq 2009-08-28
  • 打赏
  • 举报
回复
.TopRow 返回或设置 MSFlexGrid中最上面的可视行

比如:
.TopRow=100,也就说你把第100行做为开始行,而你的记录根本就没有100行,当然就不显示东西了.
  • 打赏
  • 举报
回复

  谢谢楼上各位

  我把.TopRow=.Rows-1注释掉就可以了

  这一行是用来将滚动条移到底部的。方便查看最后一次添加的数据

  能不能麻烦告知一下为什么加上这一行以后会出现上述问题

  再次感谢

  
chinaboyzyq 2009-08-18
  • 打赏
  • 举报
回复
好象应该去掉.TopRow = .Rows - 1就OK了.
chinaboyzyq 2009-08-18
  • 打赏
  • 举报
回复
If not Rs.eof or Rs.bof then 'RS为从数据库返回的记录集
Do While Not (Rs.eof or Rs.bof)
With MFG
nr = MFG.Rows - 1
.row = nr '加上试试

'产品信息
.TextMatrix(nr, 1) = rs!ID
.TextMatrix(nr, 2) = rs!kID
.TextMatrix(nr, 3) = rs!cID
.TextMatrix(nr, 4) = rs!uID
.TextMatrix(nr, 5) = rs!uClass
.Rows = .Rows + 1
'.TopRow = .Rows - 1'去掉
List1.AddItem Trim(Rs!ID) '加上此行,在LIST1控件里能正常显示出此字段的信息,但是MSFLEXGRID不显示

DoEvents
End With
Doevents
Loop
End If
  • 打赏
  • 举报
回复


   另外想请教一下这个问题是怎么产生的

   
  • 打赏
  • 举报
回复
  感谢楼上的

  因为我现在用的这个MSFLEXGRID控件并不是只为了显示记录集

  有几列是要根据读出来的记录处理以后再显示出处理以后的结果

  可能绑定记录集并不适合
饮水需思源 2009-08-18
  • 打赏
  • 举报
回复
'方法1,逐行赋值:
with hflexgrid1
.rows=rs.recordcount+1
for i_row=1 to rs.recordcount
.textmatrix(i_row,0)=rs!字段1 & ""
.textmatrix(i_row,1)=rs!字段2 & ""
.textmatrix(i_row,2)=rs!字段3 & ""
rs.movenext
next i_row
end with
rs.close

'方法2,记录集绑定mshflexgrid控件:
rs.open " select * from 表名",conn,adopenkeyset,adlockreadonly
set mshflexgrid1.datasource=rs
rs.close


  • 打赏
  • 举报
回复
[Quote=引用 1 楼 clear_zero 的回复:]
VB codeDoWhileNot (Rs.eofor Rs.bof)With MFG
nr= MFG.Rows-1'产品信息 .TextMatrix(nr,1)= rs!ID
.TextMatrix(nr,2)= rs!kID
.TextMatrix(nr,3)= rs!¡­
[/Quote]

噢。。。不好意思。。。rs.movenext是有的。。。

刚才复制的是忘了复制的。。。
clear_zero 2009-08-18
  • 打赏
  • 举报
回复

Do While Not (Rs.eof or Rs.bof)
With MFG
nr = MFG.Rows - 1
'产品信息
.TextMatrix(nr, 1) = rs!ID
.TextMatrix(nr, 2) = rs!kID
.TextMatrix(nr, 3) = rs!cID
.TextMatrix(nr, 4) = rs!uID
.TextMatrix(nr, 5) = rs!uClass
.Rows = .Rows + 1
.TopRow = .Rows - 1

List1.AddItem Trim(Rs!ID) '加上此行,在LIST1控件里能正常显示出此字段的信息,但是MSFLEXGRID不显示
rs.movenext '--这个不加上,你是怎么跳出循环的?
DoEvents
End With
Doevents
Loop

1,451

社区成员

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

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