我采用ADOQuery查询SQL SERVER数据库数据,SQL语句为:select max(num) from customer where num<:num,即在数据表中找一个小于而又最接近所给参数的数据,语句如下:
ADOdb.customer.close;
if ADOdb.customer.prepared=false then ADOdb.customer.prepared:=true;
ADOdb.customer.open;
if ADOdb.customer.recordcount>0 then
begin
......
end;
本来数据集没有返回数据记录但其recordcount却还是1,结果错误地执行了if条件下的语句。之后我改成了下面的判断方式:
if ADOdb.customer.Bof<>ADOdb.customer.Eof then
begin
......
end;
结果发现数据集没有记录时照样会执行if条件下的语句,此时Bof为True,Eof为False。
再改一次,在条件判断前加了last,first方法,结果还是不对!真是莫名其妙,究竟用什么来判断数据集有无记录?
ADOdb.customer.close;
if ADOdb.customer.prepared=false then ADOdb.customer.prepared:=true;
ADOdb.customer.open;
if ADOdb.customer.recordcount>0 then
begin
......
end;
本来数据集没有返回数据记录但其recordcount却还是1,结果错误地执行了if条件下的语句。之后我改成了下面的判断方式:
if ADOdb.customer.Bof<>ADOdb.customer.Eof then
begin
......
end;
结果发现数据集没有记录时照样会执行if条件下的语句,此时Bof为True,Eof为False。
再改一次,在条件判断前加了last,first方法,结果还是不对!真是莫名其妙,究竟用什么来判断数据集有无记录?
begin
end;这样是正确的。你可以先在查询分析器里把语句执行一下,如果有记录就不是你语句的问题
这条语句错误,即使数据库种没有记录,查询结构返回null也是recordcount=1的操作,应该改为adoquery1.fields[i].asstring<>''为空的判断才不会出错。
是有一条记录,值为null
呵呵
这个语句都会返回一条记录,所以不有没有值query1.recordcount=1;解决的办法有很多,下面是一种方法:
select isnull(max(num),0) from customer where num<:num
delphi中:
if query1.fields[0].asintege<>0 then
beginend;