我的TQuery.RecNo怎么老是-1我用的是Microsoft SQL Server 2000,BDE连接

解决方案 »

  1.   

    说对了,你跟踪一下TQuery.RecNo,
    db中定义:
        property RecNo: Integer read GetRecNo write SetRecNo;
    function TDataSet.GetRecNo: Integer;
    begin
      Result := -1;
    end;
    由此可以看出,RecNo返回始终都是-1
      

  2.   

    原码很简单,就是一个查询按扭里的代码
    如下:  str := 'select *,(frequency_count*100.00/'+sFrequency+') AS rate from wood_standard '
                +' ORDER BY frequency_count DESC' ;
      with qryWoodStandard do
      begin
        Close;
        SQL.Clear;
        SQL.Add(str);
        Open;
      end;
      qryWoodStandard.MoveBy(9);
      showmessage(inttostr(qryWoodStandard.RecNo));
    按理说提示框里显示9才对呀,怎么老显示-1呀
      

  3.   

    TO:micher_yan(小学没毕业,还学做网页)也就是说,RecNo这个属性在这里没有用了
      

  4.   

    造成这种原因一定是你查询记录为零,也就是query的recordcount=0
      

  5.   

    TO:dejiang(保龄球砸蚊子) 我跟踪了一下,我的recordcount显示为1000
      

  6.   

    这好像不太可能,如果你的记录数有1000的话,你可以这样试一下,
    qryWoodStandard.recno:=9;
    showmessage(inttostr(qryWoodStandard.RecNo));如果报错则记录为零或记录数小于9,如果记录大于9显示的一定是9。
      

  7.   

    我只是想在修改后的,数据库刷新完qryWoodStandard.MoveBy到刚才编辑的那条记录,如果RecNo属性不能记录当前记录的话,还可以换种方法,那就是在表前回一个顺序号,但我的SQL句子去不能正常显示其顺序号:SELECT (SELECT count(WS.id) FROM wood_standard WS WHERE (WS.pro_code = '01'  OR WS.pro_name = '01') ) AS NewId,* FROM wood_standard  WHERE pro_code= '01' OR pro_name = '01' ORDER BY frequency_count DESC 大侠看看得怎么改一下?
      

  8.   

    你的数据表有没有ID自动编号字段?通常用这个id字段定位记录的,我刚才又跟踪了好长时间recno,没有发现在别的地方有对recno赋值的,
    delphi帮助是这么说的:
    As implemented in TDataSet, the value of RecNo is always -1. Ordinarily an application does not access RecNo at the TDataSet level. Instead a re-implemented RecNo property in a descendant class such as TTable is accessed. RecNo provides a fallback property for derived datasets that do not support record numbers.
    大意是在TDataSet中RecNo总是-1,晕,开会……:)你们接着翻译吧
      

  9.   


    As implemented in TDataSet, the value of RecNo is always -1. Ordinarily an application does not access RecNo at the TDataSet level. Instead a re-implemented RecNo property in a descendant class such as TTable is accessed. RecNo provides a fallback property for derived datasets that do not support record numbers.原因在于這里!
    這是TDataSet寫的GetRecNo的virtual方法;
    function TDataSet.GetRecNo: Integer;
    begin
      Result := -1;
    end;TQuery繼承TDBDataSet, TDBDataSet繼承TDataSet, 而TQuery,TDBDataSet都沒有實現GetRecNo方法, 所以永遠返回-1!!!!!但是TTable對象這可以..
    TTable繼承TBDEDataSet,而TBDEDataSet實現GetRecNo方法:!!!
    function TBDEDataSet.GetRecNo: Integer;
    var
      BufPtr: PChar;
    begin
      CheckActive;
      if State = dsCalcFields then
        BufPtr := CalcBuffer else
        BufPtr := ActiveBuffer;
      Result := PRecInfo(BufPtr + FRecInfoOfs).RecordNumber;
    end;所以TQuery不能獲取RecNo屬性, 而TTable可以!!!