我用Query查询SQL2000数据库,
一摸一样的代码,为什么有的模块中不论是否能够查询到匹配记录MyQuery.Recordcount的值怎么都是返回-1,
如果查询不到匹配记录,应该返回0才对。
不知道返回-1是什么问题?
在线请教。
代码:
    MyQuery:= TQuery.Create(nil);
    try
      with MyQuery do
      try
        DatabaseName := db.DatabaseName;
        if Active then Close;
        SQL.Clear;
        SQLCode := ' select                  a.stock_name,a.stock_code,a.stock_id,a.unit,b.reserve, '
                 + ' a.stock_type,a.factory_id,a.storage_id '
                 + ' from run..stock a,run..stock_info b '
                 + ' where a.stock_id = ' + '''' + sStockID + '''';
                 + ' and a.stock_id = b.stock_id ';        SQL.Add(SQLCode);
        open;
        if RecordCount = 1 then
        begin
         ...
        end;

解决方案 »

  1.   

    是sql的游标问题,也是Delphi的一个bug,
      

  2.   

    recordcount只被推荐用在dbase和paradoc上,判断数据集空可以用isempty属性。 
    只要query.open后加last就不会错了
    还有当query和类似dbgrid相连后就不用last也可以用recordcount了
      

  3.   

    一般只有单机版的数据库才能得到这个值。
    想sql server这种大型数据库都到的都是-1
    因为这和数据库工作的方式有关系,数据库引擎不能确切的知道记录总数。
    如果你的数据集中有Memo、Blob等大容量且长度无法确知的字段时。
    Query.recordcount= -1。如果没有这些字段,那么返回值应该是正常的。 
      

  4.   

    最好不使用TQuery组件来查询SQL数据库,使用TADOQuery好。
    TQuery对于本地数据库操作来说是一种很好的解决方案,而对于SQL数据库而言就不怎么好了,原来在本地数据库上可行的方法在SQL数据库不一定能执行。因为SQL数据库和本地数据库的存贮结构不一样。
      

  5.   

    现在只好暂时用IsEmpty了,
    但是我想知道一下原因