为什么Table1.RecNo 和Query1.RecNo 总是为-1?

时间:2021-06-30 08:08:24
我用Table和DataSource连接一个SQL Server的表,DBGrid中能够正常的显示,可RecNo属性返回的总为-1,用Query显示数据也没有问题,但RecNo返回的也是-1,为何?

是不是我用错了代码?
Procedure TForm1.button1Click(Sender:Tobject);
var
  i:Integer;
begin
  i := Table1.RecNo;

  i:= Query1.RecNo
end; 

i返回-1??????

10 个解决方案

#1


你的数据集open了吗

#2


不错

#3


当然Open了,否则DBGrid上不会有值。

#4


对于SQL,ORCAL,就会有这样的错误。
如果是PARADOX,或 DBASE。

#5


只要你没有FIRST

#6


跟FIRST没有关系的

#7


RDBMS中的SQL结果集,其RecordNo和RecordCount是不可测的

#8


RecordNo只对桌面数据库有效,对于大型数据库,总是返回-1;而RecordCount对大型数据库时返回的数值不一定是对的,据我的经验,第一次Open之后,RecordCount是对的,一旦对数据库进行了修改提交,这个值就是错的了。
以上两点在Delphi的帮助中已经有说明了。

#9


所以先QUREY。FIRST,然后再LAST就可以得到正确结果了。

#10


SQL server,Access等数据库的新加记录是随机存放的,默认没有游标。
所以RecNo参数返回是-1,所在处理这类数据库时不要使用RecNo来取得当前位置。

用WHERE条件来定位就行了

#1


你的数据集open了吗

#2


不错

#3


当然Open了,否则DBGrid上不会有值。

#4


对于SQL,ORCAL,就会有这样的错误。
如果是PARADOX,或 DBASE。

#5


只要你没有FIRST

#6


跟FIRST没有关系的

#7


RDBMS中的SQL结果集,其RecordNo和RecordCount是不可测的

#8


RecordNo只对桌面数据库有效,对于大型数据库,总是返回-1;而RecordCount对大型数据库时返回的数值不一定是对的,据我的经验,第一次Open之后,RecordCount是对的,一旦对数据库进行了修改提交,这个值就是错的了。
以上两点在Delphi的帮助中已经有说明了。

#9


所以先QUREY。FIRST,然后再LAST就可以得到正确结果了。

#10


SQL server,Access等数据库的新加记录是随机存放的,默认没有游标。
所以RecNo参数返回是-1,所在处理这类数据库时不要使用RecNo来取得当前位置。

用WHERE条件来定位就行了