tb:='TB001'; //生产单
  fd:='ID,';
  fd:=fd+'A001 as 开单日期,';      fd:=fd+'A002 as 制表,';
  fd:=fd+'A003 as 客户,';
  fd:=fd+'A004 as 品名,';
  fd:=fd+'A005 as 原料尺寸,';
  fd:=fd+'A006 as 材质,';
  fd:=fd+'A007 as 订单,';
  fd:=fd+'A008 as 成品尺寸,';
  fd:=fd+'A009 as 刀模号,';
  fd:=fd+'A010 as R角,';
  fd:=fd+'A011 as 跳距,';
  fd:=fd+'A012 as 模数,';
  fd:=fd+'A013 as 间距,';
  fd:=fd+'A014 as 撕缝线,';
  fd:=fd+'A015 as 张数,';
  fd:=fd+'A016 as 卷向,';
  fd:=fd+'A017 as 纸芯,';
  fd:=fd+'A018 as 数量卷,';
  fd:=fd+'A019 as 客户编码,';
  fd:=fd+'A020 as 净面积,';
  fd:=fd+'A021 as 净用长度,';
  fd:=fd+'A022 as 卷米,';
  fd:=fd+'A023 as 车卷,';
  fd:=fd+'A024 as 备注';
  tj:='';
  dt:='';
  tj:=' where (1=1) ';
  tj:=tj+' and (A020 Like ''%'+trim(edit1.Text)+'%'') ';
  tj:=tj+' and (A021 Like ''%'+trim(edit2.text)+'%'') ';
  tj:=tj+' and (A003 Like ''%'+trim(edit3.text)+'%'') ';
  tj:=tj+' and (A016 Like ''%'+trim(edit4.text)+'%'') ';
  sqlStr:='select '+fd+' from '+tb+tj;
  edit5.Text:=sqlStr;
  dm.DataModule1.ADOQuery_MG.SQL.Clear;
  dm.DataModule1.ADOQuery_MG.SQL.Text:=sqlStr+tj;
  dm.DataModule1.ADOQuery_MG.Open;而edit5输出的字符串是SELECT ID, A001 AS 开单日期, A002 AS 制表, A003 AS 客户, A004 AS 品名, 
      A005 AS 原料尺寸, A006 AS 材质, A007 AS 订单, A008 AS 成品尺寸, A009 AS 刀模号, 
      A010 AS R角, A011 AS 跳距, A012 AS 模数, A013 AS 间距, A014 AS 撕缝线, 
      A015 AS 张数, A016 AS 卷向, A017 AS 纸芯, A018 AS 数量卷, A019 AS 客户编码, 
      A020 AS 净面积, A021 AS 净用长度, A022 AS 卷米, A023 AS 车卷, A024 AS 备注
FROM TB001
WHERE (1=1) AND (A020 LIKE '%%') AND (A021 LIKE '%Edit2%') AND (A003 LIKE '%Edit3%') AND 
      (A016 LIKE '%Edit4%')上面的SQL语句在Delphi的IDE里运行,提示:
---------------------------
生产单管理系统
---------------------------
在关键字 'where' 附近有语法错误。.
---------------------------
确定   
---------------------------
而将上面的SQL代码拷在SQL管理器里,竟可以正常执行,没有提示错误,
不知道是什么原因,已经找了好久没找到什么问题。郁闷

解决方案 »

  1.   

    这句后面的tj去掉:
    dm.DataModule1.ADOQuery_MG.SQL.Text:=sqlStr+tj;
      

  2.   

    LZ在哪工作,建表习惯似曾相识呀 TB001,TB020....
      

  3.   

    tj原先是表示空格的,后来被赋成了where(1=1)
    我总觉得楼主的建sql语句习惯不太好。没必要将空格也单独的拼,可以直接写在string里的
      

  4.   

    建议这样的代码放到sql中写,用存储过程来做
      

  5.   

    fd:=fd+'A001 as 开单日期,';                                                         fd:=fd+'A002 as 制表,';
      fd:=fd+'A003 as 客户,';
      fd:=fd+'A004 as 品名,';这样的数据库字段命名,只有一个字,汗