请问:SQL在于2000 企业管理器中返回所表后拖动滚动条才取数据的实现原理?

解决方案 »

  1.   

    应该是类似焦点离开后才提交或获取数据吧?应该是个lostfocus事件.
      

  2.   

    就是 返回所有行拖动滚动条下面好像才在Grid中填的数据.我在delphi中用DBGrid好像.几百条记录都好慢.
      

  3.   

    我知道不能用DBGrid,但用户就是要全表浏览
      

  4.   

    就是在delphi中用DBGrid表格慢,而企业管理器中却不慢.....
      

  5.   

    delphi中可以实现分批获取的,好像是在ClientDataSet里面有个叫getNextBatchRecord还是什么样的属性,
    可以控制分批读取,也就是下拉滚动条的时候,拉到当前Grid的底端后在从服务器抓下一个批量的数据出来...
      

  6.   

    这个在程序端控制的,不是在SQL Server端控制的.....
      

  7.   

    我想,你的dbgrid跟sql的企业管理器之所以有这个差别,原因应该在于企业管理器的开发者他们本身就知道数据文件的存储格式,而你是通过些db访问技术得到的结果集,再将它呈现的。打个简单的比方:我有一个txt文件a 1
    b 2
    c 3
    ....
    xxxxxzzz 1312311共有 1312311 行记录.假设你是不知道我的txt里的格式的,而我提供了接口,利用我的接口你可以得到一个结果集,你再把这个结果集显示到你的dbgrid中。而我自己做的话,因为我知道具体我的存储格式, 我就可以控制,我不需要先用接口生成结果集,每次读取时通过句柄及scrollbar的位置,来读取相应的文件位置(而不是从结果集中读取第几行到第几行), 然后我把我读到的数据显示到网格里, 这个明显是要快很多的。我不知道我有没有表达清楚我的意思。关于这个,楼主你也可能看一下关于内存映射方面的知识。当然了,上面我也只是猜的,sql server未必就是这么做的。只是个人看法仅供参考了。
      

  8.   

    很简单了,数据并非存放在表格里面,而是在外部,当表格重绘单元格时再向外部读取数据内容。参考一下MSDN里面的虚列表 virtual list control
      

  9.   

    If you are working with VC++, you could use virtual item to implement this functionaly. Pls look more materials into MSDN or Google. Good luck.
      

  10.   

    DotNet中的DataGridView中可以通过虚拟模式来实现实时填充,也就是说只填充当前显示部分的值,我想DELPHI中应该也有
      

  11.   

    用事件探察器跟踪一下, 你会发现企业管理器不是直接查数据的, 而是用了 sp_cursor 这一堆存储过程所以你要实现的话, 也可以调用这些系统存储过程, 只是要在拖动滚动条的事件中加一些处理, 去加载当前还没有加载到表格中的数据