s:='select distinct cid as a1 from compartmentprepay where ((cpstate=0) or (cpstate=-1))‘
 with frmdm.queryPublic do
       begin
           close;
           sql.clear;
           sql.Add(s);
             ExecSQL;
         end;
  if frmdm.queryPublic.FieldValues['a1'] then
        begin
              dosth
        end;当我执行这句话时,系统提示‘queryPublic:‘a1’not find’,请问这是什么原因啊?

解决方案 »

  1.   

    with frmdm.queryPublic do
           begin
               close;
               sql.clear;
               sql.Add(s);
                 Open;ExecSQL:是不需要返回数据集的命令,主要执行的是‘UPDATE ,DALETE’的语句
      

  2.   

    sql.Add(s);
    // ExecSQL;
    open;
      

  3.   

    谢谢各位参与,不过我把它改成:
               try        
                      Open;
                   except
                       ExecSQL;
                     end;
           if frmdm.queryPublic.FieldValues['a1'] then
            begin
                  dosth
            end;
    还是有问题,系统提示:‘Invaild variant type conversion’,请问这什么原因,我很菜的不理解哦。
      

  4.   

    回复人: Erice(白雪公猪) ( ) 信誉:83 
    回复人: liuqifeiyu(liuqi) ( ) 信誉:100
    回复人: hhzqf1980(hh) ( ) 信誉:77
      

  5.   

    frmdm.queryPublic.FieldValues['a1']
    你的cid 是什么类型,不支持转化为boolean
    可以直接写(举个例子)
    if frmdm.queryPublic.FieldByName['a1'].asinteger=1 then
    begin
      dosth;
    end;
      

  6.   

    'cid'是string类型的,我按照你的做了,但还是不行哦,
      

  7.   

    我再问一个问题,        showmessage(inttostr(frmdm.queryPublic.RecordCount));
           if frmdm.queryPublic.RecordCount>0 then
            begin 
                  dosth
              end;
       show出的‘frmdm.queryPublic.RecordCount’等于零,可是它仍然执行if语句,这个是逻辑错误吗?
      

  8.   

    if frmdm.queryPublic.FieldByName('a1').asinteger=1 then
    begin
      dosth;
    end;
    另外
    关于第二个问题建议你使用断点调试,不要用对话框显示!
      

  9.   

    你调用的方式不对了,~
    查询有二种方式的。一种是有数据集返回的,如“select * from XX“会返回一批记录的另一种方式直接运行。没有返回结果的。一般是用更新或删除的。
    像你这样子用的话,是后者来的。它是不会返回结果,有时还会出错
    应该用OPEN就对了。
      

  10.   

    sql语句中的a1------改成"a1"试试。
    好象不同的数据库as后面的别名使用还不一样。
      

  11.   


      if frmdm.queryPublic.FieldValues['a1'] then
            begin
                  dosth
            end;你这句要表达什么意思呢?
      

  12.   

    frmdm.queryPublic.FieldValues['a1'] 
    这个是一个variant类型的值,而if要求是一个boolean类型的值,你可以用frmdm.queryPublic.FieldValues['a1'] =?作出判断(?要与那个字段值的类型一样)
      

  13.   

    再说啦,frmdm.queryPublic.FieldValues['a1'] 又不只有一个值,你这么摆在那里要干什么呢?你的错误就只是出现在这里啦
      

  14.   

    怎么不给分阿 ~~
    我建议你先去SQL 查询分析器中测试过在来问!