请教诸位大虾啊;有2个问题出现:

1 关于模糊查询:我想在datawindow控件的查询数据过滤操作时用模糊sql语句:where xxx like “%xx%”
  程序如下:
  if ddnum = "所属类别" then
        dnum = "chu_sort"
        aa = dnum + "like '%" + znum1 + "%'"
    elseif ddnum = "材料名称" then
        dnum = "stock_name"
        aa = dnum + "like '%" + znum1 + "%'"
    elseif ddnum = "审批人" then
        dnum = "chu_exam"
        aa = dnum + "LIKE '%" + znum1 + "%'"
    elseif ddnum = "供应商" then
        dnum = "chu_supply"
        aa = dnum + "like '%" + znum1 + "%'"
    end if

         dw_1.SetTransObject(SQLCA)
        dw_1.setfilter(aa)
        dw_1.filter()
       dw_1.Retrieve();
可是每次提交执行,系统就提示:expression is not valid(不合法),难道like 关键字不能使吗???请问哪位有好方法实现这个简单模糊查询,让数据窗口对象能过虑出所需数据


Q2--  一个自己写的傻大胆的程序,目的想用语句填写出数据库中的两列记录值:1)通过入库单,出库单记录的货品数目实现统计出产品表中每一种产品的现有库存  2)在通过对库存上下限的对比,得到是否超限的警告。。。这可难坏我了,这个程序就是执行不了,我不知是不是一个数据窗口空件只能使用一个事务对象啊??请各位大哥大姐一定不吝赐教啊。。。急

    transaction dbtrans
dbtrans = create transaction

dw_1.SetTransObject(SQLCA)
//dw_1.SetTransObject(dbtrans)
integer runum,chu_num,cx_sum,downtop,overtop,cx
cx_sum = 0

string cai_namett




declare cai_name_cur cursor for
select cai_name
  from  cailiao ;
  
OPEN cai_name_cur;
FETCH cai_name_cur INTO :cai_namett;
Do While dbtrans.SQLCode <> 100
   
   

  
  //取道同样材料名的入库记录中数量的和
   declare rnum_cur cursor for
     select ruku_num
     from  ruku
     where stock_name = :cai_namett;
      
    OPEN rnum_cur;
   FETCH rnum_cur INTO :runum;
    Do While SQLCA.SQLCode <> 100
        cx_sum=cx_sum + runum
       FETCH rnum_cur INTO :runum;
   loop
    close rnum_cur;
    
  
    
    //出库同样材料名的记录,并做差
  declare cnum_cur cursor for
  select chu_num
    from  chuku
     where stock_name = :cai_namett;
  
  open cnum_cur;
  
  FETCH cnum_cur INTO :chu_num;
  Do While SQLCA.SQLCode <> 100
       cx_sum=cx_sum - chu_num  
       FETCH cnum_cur INTO :chu_num;
  loop
  close cnum_cur;
  
  
  //更新填入当前库存
  update cailiao
    set cai_num = :cx_sum
     where cailiao.cai_name = :cai_namett
     using sqlca;
  
  
  //更新填入超限
  select cai_downtop,cai_overtop
   into :downtop , :overtop
   from cailiao
   where cailiao.cai_name = :cai_namett;//取出限值
  
  if cx_sum >= overtop then//判断超限情况
     cx = cx_sum - overtop
     
     update cailiao
     set cai_chaoxian = :cx
      where cailiao.cai_name =  :cai_namett
      using dbtrans;//???设置字体颜色啊
    
  elseif cx_sum <= downtop then
     cx = cx_sum - downtop
     
      update cailiao
      set cai_chaoxian = :cx
       where cailiao.cai_name = :cai_namett
        using dbtrans;
    
  else
      cx = 0 //cx_sum - downtop
      update cailiao
     set cai_chaoxian = :cx
      where cailiao.cai_name = :cai_namett
      using dbtrans;
  end if
  
  FETCH cai_name_cur INTO :cai_namett;
Loop
Close cai_name_cur;
dw_1.Retrieve();

这个程序里面应该不会有语法错误的