改用ado试一下,如是一样,升级一下ado

解决方案 »

  1.   

    没错!问题出在数据库接口上,delphi的数据库驱动出错!识别纪录出错!ADO是最好的!ADO本身就是MS的,Sql Server也是MS的,ADO本身没错,delphi只需要读取ado接口即可.
      

  2.   

    看你用的数据库,如果是access ,query.recordcount 属性就不可用
      

  3.   

    谁说的?ado使用access数据库,query.recordcount用过呀!没事!我们整个用户应用系统都是用access数据库,没有recoundcount很难办!怎么判断完了?
    for tmpint:=1 to query.recordcount do
    begin
    ...
    qyeru.next;
    end;
    一直没出错呀!
      

  4.   

    对某些数据库,如sqlserver、access,query.recordcount 属性是会不可用的
      

  5.   

    我以前曾经使用odbc连接access就发现这个错误recordcount=-1,因为系统一直没有找到纪录尾部,所以纪录个数很大,出界了=-1
    就是数据库驱动接口出错!
    一定要使用ado,这个可靠性很高!
      

  6.   

    如果你的记录集的active是false的,那你的recordcount就有可能是-1了!
      

  7.   

    我们数据库服务器发送端sql server2000,用户端access,都用ado,很好啊!还没出错!稳定呀!
      

  8.   

    用ado是好的选择,如果一定要用query,那么在之前使用query1.fetchall,
    我以前碰见过类似问题,这样可以解决!
      

  9.   

    draft对了!有可能是active是false,否则ado下recordcount=-1不对呀!只能这个原因了!
      

  10.   

    query.recordcount 有時確實會 =-1
    我想你可以這樣試試(我曾經就這樣解決)
    select Field1,Field2,Field3,Field4.... from ........where.......
    你看一下Field1,Field2,Field3,Field4....他們的類型有沒有memo類型的,
    如果有你試著把這個memo類型的Field從此sql中去掉,再來試試會不會有此問題
      

  11.   

    query.recordcount 有時確實會 =-1
    我想你可以這樣試試(我曾經就這樣解決)
    select Field1,Field2,Field3,Field4.... from ........where.......
    你看一下Field1,Field2,Field3,Field4....他們的類型有沒有memo類型的,
    如果有你試著把這個memo類型的Field從此sql中去掉,再來試試會不會有此問題
      

  12.   

    memo值有的数据库确实会因为foreveryday老兄所说出的问题,我也遇到过.因为memo属于任意长字节的字段,所以系统判断纪录结尾时有可能出错(因为很多数据库驱动接口是按照固定长度作为一个纪录).
      

  13.   

    用RecordCount前,先使用First;Open;
    First;
    ShowMessage(INtToStr(RecordCount));
      

  14.   

    问题就出在ado上面,有些oledb provider不提供recordcount这样的功能,所以返回值就是-1,可以去看msdn,上面就是这样说的。
    其实很好解决,先select count(*) from 。这样就可以得出记录数了
      

  15.   

    使用adoquery然后:
    inttostr(adoquery1.RecordCount)试一下
      

  16.   

    加上这句话试试:
    query.active:=false;
    query.active:=true;
      

  17.   

    Query1.first;
    Query1.Last;
    ShowMessage(IntToStr(Query1.RecordCount));
    有意外惊喜
      

  18.   

    Query1.First;
    Query1.Last;
    这个可行;Query1.FetchAll;
    这个也可行;
      

  19.   

    因为我没有用ADO,所以各位关于ADO的建议,我只能谢谢大家了。我的Select
    语句中确实是有MEMO类型的字段,我想也是因为这个而引起的。我结案了。
      

  20.   

    不是的,这是你使用ADO的游标类型所影响的,你打开方式不同的时候,会有不同的读值的!