QUERY1.SQL.Add('delete from pos_t_daysum5');
 QUERY1.SQL.ADD('DELETE FROM ic_t_inout_store_detail5');
 QUERY1.SQL.ADD('select bi_t_item_info.item_no,bi_t_item_info.item_name,sum(ic_t_inout_store_detail.in_qty),bi_t_item_cls.ITEM_CLSNO ,bi_t_item_cls.ITEM_CLSNAME');
 QUERY1.SQL.ADD('from ic_t_inout_store_detail,bi_t_item_info,bi_t_item_cls');
 QUERY1.SQL.ADD('where  sheet_no like ''PI%'' and bi_t_item_info.item_no=ic_t_inout_store_detail.item_no and bi_t_item_cls.ITEM_CLSNO=bi_t_item_info.ITEM_CLSNO AND ic_t_inout_store_detail.SHEET_NO IN (select ic_t_inout_store_master.sheet_no from ic_t_inout_store_master');
 QUERY1.SQL.ADD('where ic_t_inout_store_master.branch_no LIKE :branch_no and ic_t_inout_store_master.supcust_no LIKE :supcust_no and  (convert(datetime, ic_t_inout_store_master.oper_date) BETWEEN :p1 AND :P2))');
 QUERY1.SQL.ADD('group by ic_t_inout_store_detail.item_no, bi_t_item_info.item_no,bi_t_item_info.item_name,bi_t_item_cls.ITEM_CLSNO,bi_t_item_cls.ITEM_CLSNAME');
 query1.ParamByName('branch_no').asstring:=TRIM(EDIT4.TEXT);
 query1.ParamByName('supcust_no').asstring:=TRIM(EDIT2.TEXT);
 query1.ParamByName('P1').asstring:=DateToStr(DATETIMEPICKER1.DATE);
 QUERY1.ParamByName('P2').ASSTRING:=DateToStr(DATETIMEPICKER2.DATE);
以上语句中如果输入值
query1.ParamByName('branch_no').asstring:=TRIM(EDIT4.TEXT);
 query1.ParamByName('supcust_no').asstring:=TRIM(EDIT2.TEXT);
是空值,哪么下面的语句应怎样编写
QUERY1.SQL.ADD('where ic_t_inout_store_master.branch_no LIKE :branch_no and ic_t_inout_store_master.supcust_no LIKE :supcust_no and  (convert(datetime, ic_t_inout_store_master.oper_date) BETWEEN :p1 AND :P2))');
或者
query1.ParamByName('branch_no').asstring:=TRIM(EDIT4.TEXT);
 query1.ParamByName('supcust_no').asstring:=TRIM(EDIT2.TEXT);
须怎样写才正确。 

解决方案 »

  1.   

    SQL语句,每一个功能语句要有空格或者回车符。
    你的SQL.ADD("   " + #13#10);
       SQL.Add("    " + #13#10)
    试试。
      

  2.   

    方法笨了点:'主键 in(case when '+TRIM(EDIT4.TEXT) + ' = '''+''' then (select 主键 from 表名 where isNull(ic_t_inout_store_master.supcust_no,'''+''') = '''+''') else (select 主键 from 表名 where   ic_t_inout_store_master.branch_no LIKE '+TRIM(EDIT4.TEXT)+') end)';
    最好写在后台,怎么清楚点
      

  3.   

    我是说query1.ParamByName( "branch_no ").asstring:=TRIM(EDIT4.TEXT);语名中TRIM(EDIT4.TEXT)值在输入中不输或者输入在数据表不存在。
    以下在做模糊查询时要怎么写才正确。
    QUERY1.SQL.ADD( "where   ic_t_inout_store_master.branch_no   LIKE   :branch_no   and   ic_t_inout_store_master.supcust_no   LIKE   :supcust_no   and     (convert(datetime,   ic_t_inout_store_master.oper_date)   BETWEEN   :p1   AND   :P2)) "); 
      

  4.   

    like是读取不出来空值数据的,null值只能用 branch_no is null 这样的语句提取出来。使用=或者<>都是不行的。
      

  5.   

    QUERY1.SQL.ADD(   "where       ic_t_inout_store_master.branch_no       LIKE       :branch_no       and       ic_t_inout_store_master.supcust_no       LIKE       :supcust_no       and           (convert(datetime,       ic_t_inout_store_master.oper_date)       BETWEEN       :p1       AND       :P2))   ");   在模糊查询要怎么写,(LIKE       :branch_no)要怎么写才正确。