在while循环中使用not ADOQuery.EOF时碰到的问题

LuZhou 2002-04-20 06:30:57
在Delphi6中,我使用ADOquery时:
int i := 0;
while not adoquery1.eof do
i := i + 1;
adoquery1.next;
end do
却发现adquery1总是忽略最后一条记录,也就是 i = ADOQuery1.recordcount - 1;i总是比实际记录总数小1,请问这是为什么?而且我改成用recordcount来判断时,当循环到最后一条时却报错,我用的是sybase数据库,我已经升级了ADO最新版本,还是这样,只好请各位帮帮忙了。
...全文
891 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
liu800323 2002-04-21
你想做什麽?用for i:=0 to adoQuery1.recordCount-1 do应该不会出错!!
  • 打赏
  • 举报
回复
liu800323 2002-04-21
DElphi的eof是纪录的最后一个,当你的程序执行到最后一条纪录时while not adoquery1.eof do时它就跳出了,所以是i = ADOQuery1.recordcount - 1;
  • 打赏
  • 举报
回复
LuZhou 2002-04-21
我用的是sybase 提供的ole db
  • 打赏
  • 举报
回复
ihihonline 2002-04-21
一般情况下,如果是SQL的话,那么OPEN以后应该
FIRST、LAST才能准确的定位,不然,它有可能连RECORDCOUNT也不能正确的表达出来
  • 打赏
  • 举报
回复
suvi 2002-04-21
var
i :integer;
begin
i := 0;
adoquery1.Open;
while not adoquery1.Eof do begin
i := i+1;
adoquery1.Next;
end;
Edit1.Text := IntToStr(i);
end;

我用上面的代码,测试了mssql server,没有问题的。
你用ado连接sybase使用的ado 的oledb provider还是odbc?
  • 打赏
  • 举报
回复
ihihonline 2002-04-21
TO luzhou(卢周)
我用过for i:=0 to adoQuery1.recordCount-1 do
但是报错,不要问我用这段代码打算做什么,我只是把我的问题描述清楚而已。
在你用这段代码前,你先看一看你的adoquery1.first了没有;
再者你也可以查一下,你是在那一句发出了错误,如果一切如你所说的话
(就是先定位了,但是最后一条记录错误),你打开的库看一下,当前的指针所在的位置;


  • 打赏
  • 举报
回复
vernal 2002-04-21
ADOQuery也和Query一样的用阿?
应该不会的,我也用sybase,
with ADQQuery1 do
begin
close;
sql.clear;
sql.add('..');
open;
first;
while not (ADOQuery1.eof) do
begin
do...//做你的事;
next;
end;
end;
如果再有问题,请看看你的数据库
  • 打赏
  • 举报
回复
LuZhou 2002-04-20
是ADOQuery不是Query,还有,请回答实质问题好不好?拜托啦!
  • 打赏
  • 举报
回复
firetoucher 2002-04-20
不会啊,我试过了,可以吧
  • 打赏
  • 举报
回复
ihihonline 2002-04-20
with query1 do
begin
close;
sql.clear;
sql.add('..');
open;
first;
while not (query1.eof) do
begin
do...//做你的事;
next;
end;
end;
  • 打赏
  • 举报
回复
AlanLuo_2002 2002-04-20
int i := 0; ????Delphi里面也可以用?
  • 打赏
  • 举报
回复
墨梅无痕 2002-04-20
为什么不试试把i从1开始记数呢?

我猜测RecordCount是从1开始记数的,而不是0。
  • 打赏
  • 举报
回复
macro_love 2002-04-20
你单步执行看看,看是在哪里出错
  • 打赏
  • 举报
回复
LuZhou 2002-04-20
加了adoquery1.first,记录没问题,我看过其他贴子,以为是ADO问题,但是我现在升级了ADO了还是这样。
  • 打赏
  • 举报
回复
wylove 2002-04-20
有可能是你的最后一条记录有问题(不正规或者是空记录),如果不是,不妨试一下moveby看怎么样!
  • 打赏
  • 举报
回复
tazhch 2002-04-20
你是否加了adoquery1.first
  • 打赏
  • 举报
回复
LuZhou 2002-04-20
我用过for i:=0 to adoQuery1.recordCount-1 do
但是报错,不要问我用这段代码打算做什么,我只是把我的问题描述清楚而已。
  • 打赏
  • 举报
回复
macro_love 2002-04-20
for i:=0 to adoQuery1.recordCount-1 do
begin
///做你想做的;
adoquery1.next;
end;
  • 打赏
  • 举报
回复
lvxiangyu 2002-04-20
用这段代码打算做什么?
  • 打赏
  • 举报
回复
发帖
Delphi
加入

5096

社区成员

Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
申请成为版主
帖子事件
创建了帖子
2002-04-20 06:30
社区公告
暂无公告