我的TQuery.RecNo怎么老是-1我用的是Microsoft SQL Server 2000,BDE连接
解决方案 »
- 求TfrxPDFExport导出pdf文件demo
- 初学者的笨问题,望大家帮忙!在线等
- 父进程创建子进程,子进程如何得到父进程的句柄或PID?
- WindowsMediaPlayer播放发生invalid floating point operation
- 我的程序调用一个CMD命令行程序,如何得到命令行程序的输出结果?
- dbgrideh设置问题?
- TWebbrowser/IWebbrowser2 打开新ie窗口
- 如何下载或COPY此类文件。
- 急啊:在多线程中,如何知道某个线程使用的变量是不是他自己的,如果要明确线程使用它自己的变量?请看详情
- 大家帮我看看,这样的项目应该怎样构造数据库?
- 菜鸟问题:如何修改本机时间?
- 关于释放,最后20分,希望各位帮一帮,谢谢
db中定义:
property RecNo: Integer read GetRecNo write SetRecNo;
function TDataSet.GetRecNo: Integer;
begin
Result := -1;
end;
由此可以看出,RecNo返回始终都是-1
如下: 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呀
qryWoodStandard.recno:=9;
showmessage(inttostr(qryWoodStandard.RecNo));如果报错则记录为零或记录数小于9,如果记录大于9显示的一定是9。
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,晕,开会……:)你们接着翻译吧
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可以!!!