ADOQuery1->Eof的问题

robinkeng 2011-05-18 06:31:12


问题在图片中,为什么这么时候ADOQuery1->Eof的值是FALSE呢?
ADOQuery1->First();这句是什么意思?
小弟刚学BCB,大家多多指教啊

(因为源码贴出来时乱码 我就截图了)
...全文
397 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
new_bird_0001 2011-05-19
  • 打赏
  • 举报
回复
弄错了,只记得在bcb5时不移动记录ADOQuery1->RecordCount返回-1,刚才试了一下不是这样。
robinkeng 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 new_bird_0001 的回复:]
这个写法本就有问题,首先当ADOQuery1打开时,如果表有记录,指针肯定指向第一条记录,ADOQuery1->First()这条语句完全没有必要,并且ADOQuery1-Bof为真,而ADOQuery1->Eof值为假。如果表中没有记录,则Bof和Eof同时为真。所以应该是这样:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1-……
[/Quote]
谢谢,我明白了
robinkeng 2011-05-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ccrun 的回复:]
ADOQuery1->First()是定位到第一条记录。如果Eof的值不准确,可以考虑用for遍历所有记录:


C/C++ code
ADOQuery1->Open();
for (int i = 0; i < ADOQuery1->RecordCount; i++)
{
....

ADOQuery1->Next();
}
[/Quote]
谢谢
My_Love 2011-05-19
  • 打赏
  • 举报
回复
RecordCount返回-1,表示数据集不支持RecordCount。
而Bof,Eof总是准确的!

如果数据集有3条记录:
Bof-----〉REC1
REC2
REC3
Eof------〉
bigfog 2011-05-19
  • 打赏
  • 举报
回复
我一般用for循环
如下:
for(ADOQuery1->First();!ADOQuery1->Eof;ADOQuery1->Next())
{
//你的代码
}

new_bird_0001 2011-05-18
  • 打赏
  • 举报
回复
这个写法本就有问题,首先当ADOQuery1打开时,如果表有记录,指针肯定指向第一条记录,ADOQuery1->First()这条语句完全没有必要,并且ADOQuery1-Bof为真,而ADOQuery1->Eof值为假。如果表中没有记录,则Bof和Eof同时为真。所以应该是这样:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(......);
ADOQuery1->Open();
while(!ADOQuery1->Eof)
{
......
ADOQuery1->Next();
}
使用for循环不可取,为了的到记录数,必须将数据集移动到表尾:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add(......);
ADOQuery1->Open();
ADOQuery1->Last();
ADOQuery1->First();
int RecordCount = ADOQuery1->RecordCount;
for(; RecordCount-- ;)
{
......
ADOQuery1->Next();
}
这样的效率低于while循环。
ccrun.com 2011-05-18
  • 打赏
  • 举报
回复
ADOQuery1->First()是定位到第一条记录。如果Eof的值不准确,可以考虑用for遍历所有记录:

ADOQuery1->Open();
for (int i = 0; i < ADOQuery1->RecordCount; i++)
{
....

ADOQuery1->Next();
}

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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