我用数据集连接两种数据库
access和sql-server
但是连接access数据有500条,滚动条正常,无论你怎么拖动都能正确的停留和定位
连接sql-server时,数据也是500条,滚动条显示也正常,但是拖动时就不正常了,它只能在三个位置停留
最上边,中间,最下边,不知道是不是dbgrideh的bug还是应该设置哪个属性

解决方案 »

  1.   

    应该和SQL SERVER有关吧~~~~我只知一般的DBGRID好像就有这个毛病~~帮UP~
      

  2.   

    CursorLocation属性 在哪
    可不可以告诉我
      

  3.   

    我用的数据急是query  不是adoquery 呀
      

  4.   

    绝对不会的。我用dbgrideh很久了
      

  5.   

    既然在ACCESS中都可以,那就是说基本上不是设置出问题了,你可以先把SQL中的数据一次全部提取出来再进行其它操作
      

  6.   

    to jlanyi2003(江城浪子) 你是用什么连接数据库的,连接的是什么数据库
      

  7.   

    你把dbgridth ---align设成client 也会是这样吗?
      

  8.   

    不可能吧,我用dbgrideh也很久了,怎么都没出现这样的问题!
      

  9.   

    这不关DBGrid或DBGridEh的事,是你在程序中对其数据集进行如Filter := true等操作了而使它不能重新计算而不能准确定位所以才会这样;你可去除此类操作再试,请检查你的代码
      

  10.   

    ADODataSet1.CursorLocation := clUseClient!
      

  11.   

    对于DBGridEh,有一个办法,哪就是设其SubList中Active及VirtualRecords都为True,Enjoy It!
      

  12.   

    to weizi2000(秋风啊-秋的叹息) ( ) 
    谢谢你的办法
    你想要什么说说
      

  13.   

    to   weizi2000(秋风啊-秋的叹息) 你能告诉我根本的原因吗?
    另外dbgrid没有sumlist这个属性。怎么办呢?
      

  14.   

    weizi2000(秋风啊-秋的叹息),仔细比较了一下,即使去掉了Filter也是不行的,除非你是Paradox数据库。当DataSet.IsSequenced = True的时候,滚动条只显示在上、中、下三个位置,而TBDEDataSet.IsSequenced如下实现:Result := (FRecNoStatus = rnParadox) and (not Filtered);
    我试着从TQuery继承一个,重载该函数,却发现它的GetRecNo总是-1,滚动条干脆总在最上面了。
    也许最好的解决办法只有用TClientDataSet来连接DBGrid了,或者自己来定位,不过太麻烦了。
      

  15.   

    楼上已说过了一些,可用TADOQuery代替TQuery解决Result := (FRecNoStatus = rnParadox) and (not Filtered);的问题;SubList是DBGridEh特有的,在SubList的Active设为True后即激活SumList,
    在SetVirtualRecords中调用到了RecalcAll过程,在这个过程中则对记录集的记录数进行了重新计算