fstr:='SELECT t_saledet.bmh, t_saledet.rq, t_saledet.sj, t_saledet.jyh, t_saledet.yyyh, t_saledet.skyh, t_saledet.spbh, t_saledet.sl, t_saledet.lsj, t_saledet.sjje, t_saledet.zke, t_saledet.clabel, t_ware.flh, t_spec.cname'
  +' FROM t_saledet INNER JOIN (t_spec INNER JOIN t_ware ON (t_spec.cstyle = t_ware.flh) AND (t_spec.clabel = t_ware.clabel)) ON (t_saledet.clabel = t_ware.clabel) AND (t_saledet.spbh = t_ware.spbh)'
  +' where t_saledet.bmh like ''%s'' AND t_saledet.jyh like ''%s'' AND ([t_saledet.rq])>=#%s# and ([t_saledet.rq])<=#%s#'
  +' order by t_saledet.bmh,t_saledet.rq,t_saledet.sj';
t_saledet.skyh, t_saledet.spbh, t_saledet.sl, t_saledet.lsj, t_saledet.sjje, t_saledet.zke, t_saledet.clabel, t_ware.flh, t_spec.cname';
  with ADOQuery2 do
  begin
  close;
  sql.Clear ;
  sql.Add(Format(fstr,[chHeadUnit.getbmh(ComboBox1.text)+'%',trim(edit1.text)+'%',datetostr(DateTimePicker1.Date),datetostr(DateTimePicker2.Date)]));
  Prepared;
  open;
  end;
上面的代码我修改成下面代码,不知对不对?请教各位高手,谢谢!!
 sql.Add('SELECT t_saledet.bmh, t_saledet.rq, t_saledet.sj, t_saledet.jyh, t_saledet.yyyh, t_saledet.skyh, t_saledet.spbh, t_saledet.sl, t_saledet.lsj, t_saledet.sjje, t_saledet.zke, t_saledet.clabel, t_ware.flh, t_spec.cname'
        +' FROM t_saledet INNER JOIN (t_spec INNER JOIN t_ware ON (t_spec.cstyle = t_ware.flh) AND (t_spec.clabel = t_ware.clabel)) ON (t_saledet.clabel = t_ware.clabel) AND (t_saledet.spbh = t_ware.spbh)'
  +' where t_saledet.bmh like :a AND t_saledet.jyh like :b AND ([t_saledet.rq])>= :c and ([t_saledet.rq])<= :d
       +' order by t_saledet.bmh,t_saledet.rq,t_saledet.sj');
       Parameters.ParamByName('a').Value:=chHeadUnit.getbmh(ComboBox1.text)+'%';
       Parameters.ParamByName('b').Value:=trim(edit1.text)+'%';
       Parameters.ParamByName('c').Value:=DateTimePicker1.Date;
       Parameters.ParamByName('d').Value:=DateTimePicker2.Date;

解决方案 »

  1.   

    <= :d
    后面缺东西,引号,对不对的,执行一下不就知道了
      

  2.   

    showmessage(adoquery.sql.text);
    这样看看就知道了。
      

  3.   

    +' where t_saledet.bmh like :a AND t_saledet.jyh like :b AND ([t_saledet.rq])>= :c and ([t_saledet.rq])<= :d
    后面的引号掉了。
      

  4.   

    上下两部分分别用个showmessage看一下不就知道了,这样一点点分析太麻烦
      

  5.   

    直接将 SQL 语句写成字符串不推荐,建议将 SQL 语句写入 Memo, 用 Memo.Lines.Text 的方式读取,你这样看起来嫌烦吗?
      

  6.   

    Memo1.Lines.Text
      select * from table where %sFormat(Memo1.Lines.Text, [Params]);