在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最新版本,还是这样,只好请各位帮帮忙了。
...全文
1257 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
用这段代码打算做什么?

5,928

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧