str := select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,'+
'case jc_ccp.gg when ''优级'' then jc_ccpckxx.sl else 0 end as my,'+
'case jc_ccp.gg when ''一级'' then jc_ccpckxx.sl else 0 end as m1,'+
'case jc_ccp.gg when ''合格'' then jc_ccpckxx.sl else 0 end as mh,'+
'case jc_ccp.gg when ''次品'' then jc_ccpckxx.sl else 0 end as mc,'+
'case jc_ccpck.lb when ''礼品'' then jc_ccpckxx.sl else 0 end as ml,'+
'jc_ccpck.cksj from jc_产成品出库详细 jc_ccpckxx,jc_产成品出库 jc_ccpck,jc_产成品 jc_ccp where jc_ccpck.bill=jc_ccpckxx.bill and jc_ccpckxx.bh=jc_ccp.bh and jc_ccp.mc = ''绵白糖''';
iniQuery(str,Query1);//让Query执行这条SQL语句
编译没有错误,运行时就会出现一个窗体,
标题为:CPU
第二行为:Thrcad#3056
剩下的,根本看不懂是什么东西,我感觉是16进制的数(但是,不能确定)如果,将语句改为:
str := select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,'+
'case jc_ccp.gg when ''优级'' then jc_ccpckxx.sl else 0 end as my,'+
'case jc_ccp.gg when ''一级'' then jc_ccpckxx.sl else 0 end as m1,'+
'jc_ccpck.cksj from jc_产成品出库详细 jc_ccpckxx,jc_产成品出库 jc_ccpck,jc_产成品 jc_ccp where jc_ccpck.bill=jc_ccpckxx.bill and jc_ccpckxx.bh=jc_ccp.bh and jc_ccp.mc = ''绵白糖''';
iniQuery(str,Query1);//让Query执行这条SQL语句
运行时一点错误也没有,我不知道问题的原因出在哪里了!
自我感觉问题:
1,语句太长,解决方法,将表别名缩短为一个字符,出现的结果和上述一样;
2,直接将语句写到Query.Sql.Add('')中一行一行添加,出现的结果和上述一样;
3,直接将SQL语句写到,Query控件SQL属性中,出现的结果和上述一样。请问到底出了什么问题啊,谢谢各位了!

解决方案 »

  1.   

    这个语句不算长吧,,,
    str := select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,'+
    //这边是打错的么?
    要不改用 inner join 的方式看下,
      

  2.   

    没有打错啊,这些语句,我在PL/SQL中,可以执行,能得到想要的结果啊!
    左连接和右连接都试过来了,还是一样的结果啊!
      

  3.   

    你写个存储过程不就可以了吗,这么长的sql
      

  4.   

    //这怎么?是写错了还是程序就是这么写的
    str := select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,'+str:=' ......'
      

  5.   

    str是一个字符串
    str := select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,'
    显然这句是不对的
    str:='..
      

  6.   

    撒哈拉之雨的悲伤
    哦,哦,是我在这里写错了,程序里不是这样的!
    str := 'select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,'
    不好意思啊!
      

  7.   

    你是不是用的sql2000,数据库本身打没有打补丁?如果没有打补丁,可能会出现这种问题,与程序无关的,打补丁试一下吧。
      

  8.   

    楼主把这句话直接写到ado的sql里,然后active改成true,看会不会出错呢
      

  9.   

    logne() 谢谢你啊!
    我这种方法我用过了,结果还是一样的!
      

  10.   

    LZ不是delphi中标了吧?看看新建工程会不会出现cpu调试框...
      

  11.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Str: string;
    begin
      str := 'select jc_ccpck.bill, jc_ccp.mc, jc_ccp.gg, jc_ccpckxx.sl, '+
        'case jc_ccp.gg when ''优级'' then jc_ccpckxx.sl else 0 end as my,' +
        'case jc_ccp.gg when ''一级'' then jc_ccpckxx.sl else 0 end as m1,' +
        'case jc_ccp.gg when ''合格'' then jc_ccpckxx.sl else 0 end as mh,' +
        'case jc_ccp.gg when ''次品'' then jc_ccpckxx.sl else 0 end as mc,' +
        'case jc_ccpck.lb when ''礼品'' then jc_ccpckxx.sl else 0 end as ml,' +
        'jc_ccpck.cksj from jc_产成品出库详细 jc_ccpckxx,jc_产成品出库 jc_ccpck,jc_产成品 jc_ccp where jc_ccpck.bill=jc_ccpckxx.bill and jc_ccpckxx.bh=jc_ccp.bh and jc_ccp.mc = ''绵白糖'''; { str := 'select jc_ccpck.bill,jc_ccp.mc,jc_ccp.gg,jc_ccpckxx.sl,' +
       // 'case jc_ccp.gg when ''优级'' then jc_ccpckxx.sl else 0 end as my,' +
        //'case jc_ccp.gg when ''一级'' then jc_ccpckxx.sl else 0 end as m1,' +
        'jc_ccpck.cksj from jc_产成品出库详细 jc_ccpckxx,jc_产成品出库 jc_ccpck,jc_产成品 jc_ccp where jc_ccpck.bill=jc_ccpckxx.bill and jc_ccpckxx.bh=jc_ccp.bh and jc_ccp.mc = ''绵白糖''';
    }
      adoQuery1.SQL.Clear;
      ADOQuery1.SQL.Add(str);
      ADOQuery1.Open;
    end;
    在sqlserver 2000个人版下验证通过的,两句话全都可以正确执行
      

  12.   

    楼主还是把iniQuery这个函数贴出来看看吧
      

  13.   

    qjinshanq() 
    没有,没有,其他程序都好使!
    logne() 
    恩,在oracle里执行也都可以通过
    procedure iniQuery(str:string;Q:TADOQuery);
    begin
        With Q do
        begin
          CLose;
          SQL.Clear;
          SQL.Add(str);
          Open;
        end;
    end;我简单的写了一个,执行两句没问题
    执行其他SQL语句也没有问题!