查询分析器里面没有有关问题,在ADOQuery.sql.add()种为什么就出错呢

查询分析器里面没有问题,在ADOQuery.sql.add()种为什么就出错呢?
SELECT   *   FROM   AddProduct   WHERE   (KeHuName   =   '中国饭店 ')   AND   (Product   =   '佛跳墙)   AND   (AddDate   =(SELECT   MAX(AddDate)   FROM   AddProduct   where   (KeHuName   =   '中国饭店 ')   AND   (Product   =   '佛跳墙)))

在Delphi中我是这样写的:
DM.ADOQuery5.Close;
                                DM.ADOQuery5.SQL.Clear;
                                DM.ADOQuery5.SQL.Add( 'SELECT   *   FROM   AddProduct   WHERE   (KeHuName   =:KHN)   AND   (Product   =:PN)   AND   (AddDate   =(SELECT   MAX(AddDate)   FROM   AddProduct   where   (KeHuName   =   :KHN)   AND   (Product   =   :PN))) ');
                                DM.ADOQuery5.Parameters.ParamByName( 'KHN ').Value:=ComboBox4.Text;
                                DM.ADOQuery5.Parameters.ParamByName( 'PN ').Value:=CheckBox4.Caption;
                                DM.ADOQuery5.Open;


我感觉参数没有错啊。可是运行的时候出现:“不正常地定义参数对象,提供了不一致或不完整的信息”

------解决方案--------------------
DM.ADOQuery5.SQL.Add()参数不能为有参数的sql语句。
写法如下:
DM.ADOQuery5.SQL.Add( 'SELECT * FROM AddProduct WHERE (KeHuName ' + ComboBox4.Text + ') AND (Product = ' + CheckBox4.Caption + ') AND (AddDate =(SELECT MAX(AddDate) FROM AddProduct where (KeHuName = ' + ComboBox4.Text + ') AND (Product = ' + CheckBox4.Caption + '))) ');
------解决方案--------------------
看看这样改行不

DM.ADOQuery5.SQL.Clear;
DM.ADOQuery5.SQL.Add( 'SELECT * FROM AddProduct WHERE (KeHuName =:KHN) AND (Product =:PN) AND (AddDate =(SELECT MAX(AddDate) FROM AddProduct where (KeHuName = :KHN1) AND (Product = :PN1))) ');
DM.ADOQuery5.Parameters.ParamByName( 'KHN ').Value:=ComboBox4.Text;
DM.ADOQuery5.Parameters.ParamByName( 'PN ').Value:=CheckBox4.Caption;
DM.ADOQuery5.Parameters.ParamByName( 'KHN1 ').Value:=ComboBox4.Text;
DM.ADOQuery5.Parameters.ParamByName( 'PN1 ').Value:=CheckBox4.Caption;
DM.ADOQuery5.Open;

------解决方案--------------------
DM.ADOQuery5.Close;
DM.ADOQuery5.SQL.Clear;
DM.ADOQuery5.Text:= 'SELECT * FROM AddProduct WHERE (KeHuName = '+Quotedstr(ComboBox4.Text)+ ') AND (Product = '+Quotedstr(CheckBox4.Caption)+ ') AND (AddDate =(SELECT MAX(AddDate) FROM AddProduct where (KeHuName = '+Quotedstr(ComboBox4.Text)+ ') AND (Product = '+Quotedstr(CheckBox4.Caption)+ '))) ';
DM.ADOQuery5.Open;
------解决方案--------------------
哈哈...楼主想省事呀???
DM.ADOQuery5.Close;
DM.ADOQuery5.SQL.Clear;
DM.ADOQuery5.SQL.Add( 'SELECT * FROM AddProduct WHERE (KeHuName =:KHN) AND (Product =:PN) AND (AddDate =(SELECT MAX(AddDate) FROM AddProduct where (KeHuName = :KHN) AND (Product = :PN))) ');
DM.ADOQuery5.Parameters.ParamByName( 'KHN ').Value:=ComboBox4.Text;