请问以下两段语句哪种语句更好?
Var
i:integer;
begin
AdoQuery1.First;
for i:=0 to AdoQuery1.RecordCount-1 do
begin
Combobox1.Items.Add(AdoQuery1.FieldByName('EmpID').AsString);
AdoQuery1.Next;
end;
AdoQuery1.First;
While Not AdoQuery1.Eof Do
begin
Combobox2.Items.Add(AdoQuery1.FieldByName('EmpID').AsString);
AdoQuery1.Next;
end;
end;
Var
i:integer;
begin
AdoQuery1.First;
for i:=0 to AdoQuery1.RecordCount-1 do
begin
Combobox1.Items.Add(AdoQuery1.FieldByName('EmpID').AsString);
AdoQuery1.Next;
end;
AdoQuery1.First;
While Not AdoQuery1.Eof Do
begin
Combobox2.Items.Add(AdoQuery1.FieldByName('EmpID').AsString);
AdoQuery1.Next;
end;
end;
解决方案 »
- delphi如何用WinPcap实现捕获网卡数据包?高分相送
- 求教:如何在DateSet的Beforescroll事件中,取消光标移动?
- 我的程序在别人的机器上运行不到
- 如何使form的大小是不可改变的,即不可拖动form
- 关于表的字段的修改问题?
- 编的一个数学统计函数,在调试时,有时出错(调用内存FFFF...),有时不出错,但所给条件未变,请问大家有何高见,是何原因?
- 请教!能否给一个stringGrid的例程,谢谢!
- *********谁能解释一下软件开发中的C/S和B/S结构呀?!?!***********
- 关于ReportBuilder的问题,请熟悉他的人帮帮忙!
- delphi6好用吗?
- 高手请教:为什么CGI程序出这样的错误啊,请指点???
- 我打算用delphi做B/S结构的应用,大家觉得用什么方案最好?谢谢!
AdoQuery1.First;
While Not AdoQuery1.Eof Do
begin
Combobox2.Items.Add(AdoQuery1.FieldByName('EmpID').AsString);
AdoQuery1.Next;
end;
(1)当记录很多时,RecordCount属性的返回值不一定准确。
(2)第一种方法还要定义一个临时变量,多不便哪!!
1、当ADOQuery1中有BLOB字段时,读出来的recordcount为-1,怎么循环?
2、当记录数很大时,RecordCount的速度很慢,特别是有Blob字段时更慢
3、Eof只是一个指针判断问题,速度不会有影响
4、很直观
While Not AdoQuery1.Eof Do
begin
Combobox2.Items.Add(AdoQuery1.FieldByName('EmpID').AsString);
AdoQuery1.Next;
end;
楼上哪位叫杰克逊的老兄太小看delphi了吧,for,while在delphi编译后是没有区别的,borland是做编译器出身的,有很强大的编译器优化功能,而且在优化之后都是在往while转化,c语言优化编译后循环转换为for格式,但是到了汇编就只有一种循环了。
楼上说eof每次判断的朋友,好像每次TDataSet在做了next之后都会对eof进行校验,不管你乐意不乐意,prior都会对bof进行校验,所以不会影响效率。
还有recordcount的数据准确性值得怀疑,当数据库是paradox,dbase,access时数据确实没有问题,但是碰到oracle,sql server,sybase等大型数据库的时候肯定是不够准确的。
另外有一个建议,while not adoquery1.eof do在编程里面是不建议这么写的。根据软件工程的规定,在源代码中应尽量避免使用非运算就是not运算。一来影响代码的可读性,而来需要多一次判断。
如果写成while adoquery1.eof=false do,这样就比上面的写法少了一次非运算了。