关于query的recno属性为什么一直返回"-1"值?(50分)

  • 主题发起人 主题发起人 fu_qi_ming
  • 开始时间 开始时间
F

fu_qi_ming

Unregistered / Unconfirmed
GUEST, unregistred user!
关于query的recno属性为什么一直返回"-1"值?请教
 
这好像是BDE的一个Bug.
试一下:先调用TQuery->Last()好像就可以了
 
怎么可能呢﹖
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
adoquery1.SQL.Add('select * from jg');
adoquery1.Active:=true;
while not adoquery1.Eof do begin
//showmessage(inttostr(adoquery1.RecNo));
memo1.Lines.Add(inttostr(adoquery1.RecNo));
application.ProcessMessages;
adoquery1.Next;
end;

end;
 
>>这好像是BDE的一个Bug
不是,这事情我问过支持,被告知这个属性是数据库相关的,borland
文档上也有说,好像Oracle就没问题。
如果想用recno,建议你在一个datamodal里使用clientdataset,provider,
和querydataset,然后用datasource去关联clietdataset和数据控件。clientdataset
的recno是数据库无关的。
 
我也遇到过这个情况,解决的办法是,使用一个变量。
myReno = 0
adoquery1.SQL.Add('select * from jg');
adoquery1.Active:=true;
while not adoquery1.Eof do begin
myReno := myReno +1
showmessage(inttostr(myRecNo));
application.ProcessMessages;
adoquery1.Next;
end;
 
真实的数据纪录条数可以让adoqery1.SQL.Add('select count(*) as RecoNo from jg')
得到的是准确的数目吧?
 
我用的是query,不是adoquery,想要取得当前记录在此query中是第几条,不是记录的总条数
 
有许多数据库不支持 recno,解决的办法也很简单,增加一个永久计算字段就
可以了.
 
在表里加,还是写sql时加一个,如果再表里加 ,我删除,插入记录时不是很烦琐,如果在sql中
应该怎么写?
 
你可以在打开 TQUERY 后 last() 一次 然后再 FIRST() 一次
这时你的的 RECNO 就会有值了,其实如果你有兴趣的话你可以看看VCL中 RECNO
是怎么赋值的 那你就会清楚了
 
刚刚我搞错了 SORRY, TQUERY是不可以看见 RECNO 的 不过你可以在外面加一个
CLIENTDATASET去完成 这个功能 或者 最简单的办法 就是
用 EHLIB 中的 DBGridEh1.SumList.RecNo 吧,希望可以帮到你
 
请问 kim64:

问题1:
我用Query好像不用Last,First也可以读出RecNo数值

问题2:
看VCL中关于RecNo,
property RecNo: Integer read GetRecNo write SetRecNo;

function TDataSet.GetRecNo: Integer;
begin
Result := -1;
end;

procedure TDataSet.SetRecNo(Value: Integer);
begin
end;

不是很清楚,能否解答以下 thx
 
到底 query的recno的属性有没有用???
 
clientdataset的recno属性有用..
 
我也碰过此问题,用MoveBy()可以达到一些相同效果
 
使用不同的数据库会有不同的答案!
有的支持delphi中query的recno,有的不支持,所有的recno==-1
 
adoquery的recno属性也有用
 
好象,adoquery和clientdataset的recno 有用
query有的可以...有的不行
 
后退
顶部