ADO数据引擎下显示记录号问题(100分)

  • 主题发起人 主题发起人 Lucky
  • 开始时间 开始时间
L

Lucky

Unregistered / Unconfirmed
GUEST, unregistred user!
OnCalcFields事件显示记录号,在BDE数据引擎下正常,但在ADO数据引擎下第一条记录
及最后一条记录显示为-1。不知各位大侠有何高招可以赐教?

procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
ADOQuery1Sn.Value := ADOQuery1.RecNo;
end;
 
我看也算是delphi bug之一?本来很简单的事情,
不知道为什么被Delphi搞复杂了,所以出错(也许是有其他原因不得不为吧?)
总之,你直接这样写就可以:
ADOQuery1Sn.Value:=adoquery1.Recordset.AbsolutePosition;

不过你的编程习惯很不好呀!应该写:
procedure TForm1.ADOQuery1CalcFields(DataSet: TDataSet);
begin
DataSet.FieldByName('Sn').AsInteger := TADODataSet(DataSet).Recordset.AbsolutePosition;
end;

才够“漂亮” :-)
 
可能是ADO数据引擎版本不够新,建议用ado 2.5sp1版的,还有你的adoexpress打补丁没有?
 
注意一下表类型!
 
同意温柔一刀的意见。马上就要给分,谁还有高招赶紧说!
请问yangkee那里有ado 2.5sp1版和adoexpress补丁?(我比较lazy!) Thank you!
 
不用等什么高招了 :-)

另外需要注意的是,最好事先(读AbsolutePosition之前)判断dataset是否为空,
为空就不要读了,这样可以省去不必要的麻烦。
 
ado 2.5sp1:http://www.microsoft.com/data/download_25SP1.htm (有中文版哦)
adoexpress patch: ftp://202.101.106.27/delphi/Miracle/ADO26DelphiPatch.zip
 
多人接受答案了。
 
后退
顶部