Mform1.ADOQuery2.SQL.Add('SELECT  ');
Mform1.ADOQuery2.SQL.Add('SUM(wkptimere) - 1000  生产能力  ,sum(wkptime) 计划工时,SUM(wkovt) 加班工时 from crpda where wkcl=:Sname and wksta>=:st and wksta<= :en group by wkptimere      ');
 Mform1.adoquery2.Parameters.ParamByName('Sname').Value:=cl ;
 Mform1.adoquery2.Parameters.ParamByName('St').Value:=strtoint(edit1.Text)  ;
 Mform1.adoquery2.Parameters.ParamByName('en').Value:=strtoint(edit2.Text);
 Mform1.ADOQuery2.Open;
 Mform1.adoquery2.ExecSQL;
上面是语句代码,在上面的语句中 SUM(wkptimere) - 1000 这个格式的时候,数值是正确的。。但是我想把1000作为一个变量存在,只要1000为变量查询结果都会为空。
已经做过的测试包括
 SUM(wkptimere) - :gs
Mform1.adoquery2.Parameters.ParamByName('gs').Value:=1000;
还有定义SQL变量
Mform1.ADOQuery2.SQL.Add('DECLARE @zz float ');
Mform1.ADOQuery2.SQL.Add('SET @zz=1000');
SUM(wkptimere) - @zz
以上两种方法查询结果都为空。。求助如果让1000作为可变量随意赋值

解决方案 »

  1.   


    var bl integer;
    bl:=1000;
    Mform1.ADOQuery2.SQL.Add('SUM(wkptimere) - '+inttostr(bl)+'  生产能力  ,sum(wkptime) 计划工时,SUM(wkovt) 加班工时
      

  2.   


    inttostr(bl),这个有问题啊 wkptimere的类型是FOLAT的,不需要转换成字符吧
    无法执行这条语句
      

  3.   


    可以执行了但是结果还是为空。。但是 SUM(wkptimere) - 1000   时 结果就是正确的
      

  4.   


    inttostr(bl),这个有问题啊 wkptimere的类型是FOLAT的,不需要转换成字符吧
    无法执行这条语句
    'SUM(wkptimere) - ' 这是一个string形的字符串吧?
    后面的'  生产能力  ,sum(wkptime) 计划工时,SUM(wkovt)...'也是string形的字符串吧
    字符串链接,所以要把integer或者float的转换为string啊 
      

  5.   


    inttostr(bl),这个有问题啊 wkptimere的类型是FOLAT的,不需要转换成字符吧
    无法执行这条语句
    'SUM(wkptimere) - ' 这是一个string形的字符串吧?
    后面的'  生产能力  ,sum(wkptime) 计划工时,SUM(wkovt)...'也是string形的字符串吧
    字符串链接,所以要把integer或者float的转换为string啊 
    这几个字段都是float类型的,全部的语句就在这里。。及时只执行SUM(wkptimere) - 1000,这个也是没有结果的,我觉得好像就是这里的问题
      

  6.   

    问题已经解决。。结贴了。。贴出解决方法
     Mform1.ADOQuery2.SQL.Add('SELECT  ');
            Mform1.ADOQuery2.SQL.Add(  Format('SUM(wkptimere) - %d  生产能力,',[bl]));
            Mform1.ADOQuery2.SQL.Add('sum(wkptime) 计划工时,SUM(wkovt) 加班工时 from crpda where wkcl=:Sname and wksta>=:st and wksta<= :en group by wkptimere      ');
            //Mform1.adoquery2.Parameters.ParamByName('gs').Value:=1000;
            Mform1.adoquery2.Parameters.ParamByName('Sname').Value:=cl ;
            Mform1.adoquery2.Parameters.ParamByName('St').Value:=strtoint(edit1.Text)  ;
            Mform1.adoquery2.Parameters.ParamByName('en').Value:=strtoint(edit2.Text);
            Mform1.ADOQuery2.Open;
            Mform1.adoquery2.ExecSQL;关键是利用了FORMAT格式
      

  7.   

    试试
    var
      sqlstr:string;
    sqlstr:='SUM(wkptimere)-1000 as 生产能力,sum(wkptime) as 计划工时,SUM(wkovt) as 加班工时 from crpda where wkcl=';
    sqlstr:=sqlstr+''''+cl+''''+' and wksta>='+''''+edit1.text+''''+' and wksta<='+''''+edit2.test+''''+' group by wkptimere';
    adoquery2.close;
    adoquery2.sql.clear;
    adoquery2.sql.add(sqlstr);
    adoquery2.open;上面这段话是我自己敲打的可能有错,自己改改,不要用插入传递,难用死。
      

  8.   


    var
      sqlstr:string;
    sqlstr:='select SUM(wkptimere)-1000 as 生产能力,sum(wkptime) as 计划工时,SUM(wkovt) as 加班工时 from crpda where wkcl=';
    sqlstr:=sqlstr+''''+cl+''''+' and wksta>='+''''+edit1.text+''''+' and wksta<='+''''+edit2.test+''''+' group by wkptimere';
    adoquery2.close;
    adoquery2.sql.clear;
    adoquery2.sql.add(sqlstr);
    adoquery2.open;showmessage(sqlstr) --看看sqlstr是不是你想要的sql语句,不是的话就调整