我采用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方法,结果还是不对!真是莫名其妙,究竟用什么来判断数据集有无记录?

解决方案 »

  1.   

    ADOdb.Customer.RecordCount就是数据集Customer的记录数
      

  2.   

    if ADOdb.customer.recordcount>0 then
      begin
      end;这样是正确的。你可以先在查询分析器里把语句执行一下,如果有记录就不是你语句的问题
      

  3.   

    事实不是这样的,数据集Customer执行open后,明明数据集无记录可ADOdb.Customer.RecordCount仍返回1
      

  4.   

    My_first(海浪):当有记录时是对的,但没有记录时ADOdb.Customer.RecordCount仍返回1,怎么回事?
      

  5.   

    select max(num) from customer 
    这条语句错误,即使数据库种没有记录,查询结构返回null也是recordcount=1的操作,应该改为adoquery1.fields[i].asstring<>''为空的判断才不会出错。
      

  6.   

    你看一下是一个null值啊
    是有一条记录,值为null
    呵呵
      

  7.   

    select max(num) from customer where isnull(num,0)<:num
      

  8.   

    select max(num) from customer where num<:num
    这个语句都会返回一条记录,所以不有没有值query1.recordcount=1;解决的办法有很多,下面是一种方法:
    select isnull(max(num),0) from customer where num<:num
    delphi中:
    if query1.fields[0].asintege<>0 then
    beginend;