ADOQry.Close;
  ADOQry.SQL.Clear;
  ADOQry.SQL.Add(sqlStr);
  ADOQry.Open;
  ADOQry.ExecSQL;
  recCount := ADOQry.RecordCount;
SqlStr如果在sql查询里面,有一条记录的,为什么这里的结果却是-1???

解决方案 »

  1.   

    Delphi5?
    把补丁都打了吧
    还有,Open了就不用ExecSQL了
      

  2.   

    如果OPEN了就不要再EXECSQL了.EXECSQL是在不返回数据集时使用的.
      

  3.   

    Open和ExecSQL是不同的操作,是不一样的。
    把你代码里的ExecSQL试试!
      

  4.   

    ExecSQL 通常执行的都是 Update、Insert 等相关语句
    如果是 Select 语句,想返回记录集的话,只执行 Open() 就可以了。
    例如:
     ADOQry.Close;
      ADOQry.SQL.Clear;
      ADOQry.SQL.Add(sqlStr);
      ADOQry.Open;
      recCount := ADOQry.RecordCount;
    多看看相关资料吧。
      

  5.   

    其实RecordCount并不是指结果集中的记录数是指已经读取得记录数,翻ADO文档吧
      

  6.   

    所以光打开返回的是-1,必须等移动到EOF时,RecordCount 才是真正的记录数
      

  7.   

    在Open之后,ADOQry.Last;
    ADOQry.First;再取RecordCount就对了。
      

  8.   

    如果OPEN了就不要再EXECSQL了.EXECSQL是在不返回数据集,所以RecordCount当然是-1了,把EXECSQL去了就OK了
      

  9.   

    OPEN EXECSQL 是两个不同的操作,OPEN返回数据集操作结果,而EXECSQL不返回数据集,去掉EXECSQL就行了。
      

  10.   

    TO  gzmhero(hihihi)
        
    一定是当前取得的记录数目吗?我有疑问比如说:添加一个ADOConnection与一个ADOQueryADOConnection的CacheSize设为1000,其余取默认值,ADOQuery 的SQL为 Select * From Tabel1,OPEN,理论上只取1000条数据,取其RecordCount为27000,也就是说,全部记录都取回来了