with DataFm.ADOQueryBook do
  begin
    close;
    sql.Clear;
    sql.Add('select 客房编号 from 客房信息 where 状态=''空房'' and 类型编号=(select 类型编号 from 客房类型 where 类型名称=:vlxmc)');
    Parameters.ParamByName('vlxmc').Value:=trim(roomtypebox.Text);
    ExecSQL;
    open;
    First;
    while not Eof do
    begin
      roomnumbox.Items.Add(fieldbyname('客房编号').AsString);
      next;
    end;
  end;帮俺看看这段代码  为啥  我使用了 first  但是 他还是不进下面那个while 循环啊 ?在access里就可以  放到mssql 就不行   很郁闷  帮我看下啊  谢谢了  

解决方案 »

  1.   

    with DataFm.ADOQueryBook do 
      begin 
        close; 
        sql.Clear; 
        sql.Add('select 客房编号 from 客房信息 where 状态=''空房'' and 类型编号=(select 类型编号 from 客房类型 where 类型名称=:vlxmc)'); 
        Parameters.ParamByName('vlxmc').Value:=trim(roomtypebox.Text); 
        //ExecSQL; 这儿应该注释掉
        open; 
        First; 
        while not Eof do //你这儿进不去循环,说明你的选出记录数是0,把你上面的SQL语句放到查询分析器里测试一下
        begin 
          roomnumbox.Items.Add(fieldbyname('客房编号').AsString); 
          next; 
        end; 
      end; 
      

  2.   

    我的 记录数 不是0  里面有很多  只要把 and 后面的和Parameters.ParamByName('vlxmc').Value:=trim(roomtypebox.Text); 这句 去掉 就能进入while循环
      

  3.   

    你把这句去掉还怎么限制条件?知道你记录很多,但是open后,却一个没选出来,可能是你的SQL语句的问题,放到查询分析器里试一下不就得了
      

  4.   

    select 客房编号 from 客房信息 where 状态='空房' and 类型编号=(select 类型编号 from 客房类型 where 类型名称='putongfang')我把它改称上面的 在查询分析器 里 可以显示