我在程序中将adoquery的cursortype设为ctDynamic后,无论执行什么查询RecordCount都是为-1,为什么会这样?有谁能告诉我将adoquery的cursortype设为ctDynamic和ctStatic后,在编程上会有什么差别?
谢谢!!

解决方案 »

  1.   

    在我这里,无论ADOQuery的CursorType是ctDynamic或ctStatic,它的RecordCount总是正确的。试一下:
    ADOQuery1.first;
    ADOQuery1.last;
    ShowMessage(IntToStr(ADOQuery1.RecordCount));
      

  2.   

    你的ADO客户端有个缓存,大小由cachesize决定.ADO每次取一定数量(暨缓存大小)的记录进缓存.ctstatic指当取了数据后,如果数据发生改变,也不影响缓存中的数据,所以你看不到别人对数据库的操作.ctdynamic指ADO每次只取记录的关键字进缓存,你要看记录时,ADO根据关键字又去数据库中取数据.你可以看到最新的数据.
      我估计recordcount为负数是因为你的ADO驱动程序的问题,因为ADO的属性与它有很大关系.
      

  3.   

    这个问题跟那个属性没什么关系。
    关键在于你使用的那种数据库可能不支持RecordCount属性,我记得Oracle就不行。
    在这种情况下返回的总是-1。
      

  4.   

    RecordCount和RecNo不是所有数据库都支持的,
    所以在程序里面应该谨慎的使用这些东西。
    类似RecordCount在他的help里面就建议最好用sql 来得到
    select count(*) from xxxx
      

  5.   

    你的
    cursorlocation 属性设置成了 cluserserver
    应该该为 cluserclient 
    改好了以后recordcount就回好用了
      

  6.   

    一个是recordcount的支持问题
    一个是指针模式问题,
    大家都说啦,我总结一下
      

  7.   

    我连的是sqlserver2000,我试过设成静态时是可以得到准确结果,但改成动态就不行了。
    顺便问一下,将curseortype设成静态,然后每次更新后就close、open,跟将curseortype设成动态,在效率上会不会有很大差别?