rs.Open "execute 存储1", con, 1, 3
Set MSHFlexGrid1.DataSource =rs
为什么显示的数据显示不完整的,还有一些没有显示出来?
我用msgbox rs.RecordCount是显示的是-1,但是我在查询分析器中有900多的记录显示,而显示在控件上的只有800,这个是怎么回事啊,我查询出来的数据的列是每次都变的,不是固定,下载到EXECL中只能依靠MSHFlexGrid了,但是MSHFlexGrid又显示不全,这怎么办啊?我的内存是512的,求各位老大给一个解决的办法啊,或是怎么解决MSHFlexGrid的显示问题。万分感谢啊!!很着急 啊!!!!!!!!!!!1

解决方案 »

  1.   

    安装VB6SP5,将存储过程的查询结果写到一临时表,程序再从临时表读取并显示到mshflexgrid控件
      

  2.   

    rs.Open语句前加“rs.CursorLocation = adUseClient”一句就可使rs.RecordCount得到正确的值。
      

  3.   

    sql = "execute 存储1"
    Adodc1.ConnectionString = con
    Adodc1.RecordSource = sql
    Set MSHFlexGrid1.DataSource = Adodc1
    Adodc1.Refresh
    我已经自己装载完了。上面的代码可以
    我刚刚试了一下,这样是可以完全装载的,不知道是什么原因大家分析一下啊!
      

  4.   

    用MSHFlexGrid1控件无须返回rs.RecordCount值
    这个方法rs.Open "execute 存储1",con,1,3 我认为是不适当的,试试:
    set rs=cn.execute("存储1")
     
      

  5.   

    另外如果你要返回rs.RecordCount,就要设置客户端游标cn.CursorLocation = adUseClient
    默认情况下是服务器端游标,性能更好点,但不返回rs.RecordCount
      

  6.   

    rs.CursorLocation   =   adUseClient是需要加上的;
    绑定不好用的话可一行行的添加进去,效果还算可以。
    VSFlexGrid也是不错的表格控件,功能远大于MSHFlexGrid
      

  7.   

    游标问题
    rs.CursorLocation=adUseClient
      

  8.   

    楼主程序的问题最有可能是出在游标上,与控件的使用关系不大,我只是推荐VSFlexGrid控件,该插件是ComponentOne Studio Enterprise 中的一个,功能比MSHFlexGrid强大的多。http://lib.verycd.com/2007/03/15/0000143145.html可以下载得到。
      

  9.   

    MSHFlexGrid1无需设置rs.CursorLocation=adUseClient,这个大家可以测试
    因为MSHFlexGrid1不须要绑定rs,也就是所谓离线式表格控件,对其中数据的编辑,不会影响rs,同样给其赋值后关闭rs
    也不会影响其数据的正常显示。所以如果你不要编辑数据,可以用服务器端游标,高效的返回数据,用MSHFlexGrid1显示。
    这就是其与DataGrid控件的不同之处,这是个在线式的表格控件,对其的修改直接影响到rs,同样它也离不开rs,显示过程不能关闭rs.正因为它是完全的客户端行为,所以必须设置rs.CursorLocation=adUseClient
      

  10.   

    我的测试代码: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
      

  11.   

    为什么用这样的语句就能全部显示呢?
    sql   =   "execute   存储1" 
    Adodc1.ConnectionString   =   con 
    Adodc1.RecordSource   =   sql 
    Set   MSHFlexGrid1.DataSource   =   Adodc1 
    Adodc1.Refresh 
    这样是OK的
      

  12.   

    不用Adodc1控件,这个问题不清楚
    不过看上去这个代码应该是合理的,是用Adodc1的连接对象返回数据的
    和你的rs.open方式不同的
    我测试了一下,用set rs=cn.execute("存储名称 参数"),这样完全没问题