动态修改带提取参数的数据窗口的SQL语句时报错,返回值是-1
在通用查询中,可能用户选择了不同的条件,然后将这些条件再附加在原SQL语句后面,从而完成查询动作.具体做法就是:
1.先通过新建存储过程得到原数据窗口对象的Select语句,存于ls_oldselect
2.通过对用户的选择进行分析,产生附加条件ls_sqlwhere
3.将附加条件附加在ls_oldselect尾部形成新的Select语句 ls_newselect
4.然后再更改数据窗口的Select语句为ls_newselect
但有一个问题,那就是如果源数据窗口对象没有提取参数则一切正常,如果有提取参数问题就出来了:在第4步设置Select语句时总是返回-1,具体代码如下:
string ls_sqlwhere,ls_dataobject
string ls_oldselect,ls_newselect
datastore lds
//得到原始SQL语句
ls_dataobject = dw_1.dataobject
lds = create datastore
lds.dataobject = ls_dataobject
lds.settransobject(sqlca)
ls_oldselect = lower(lds.GetSQLSelect())
destroy lds
//得到更改的查询条件
ls_sqlwhere = event ue_getwhere()
if len(ls_sqlwhere) > 0 then
if Pos(ls_oldselect,'where') > 0 then
ls_newselect = ls_oldselect + " and (" + ls_sqlwhere + ")"
else
ls_newselect = ls_oldselect + " where " + ls_sqlwhere
end if
else
ls_newselect = ls_oldselect
end if
//重新设置数据窗口的SQL语句
if dw_1.SetSQLSelect(ls_newselect) < 0 then
Clipboard (ls_newselect)
messagebox('提示','设置查询数据窗口SQL语句时出错!')
return
end if
CloseWithReturn(this,is_showwhere) //返回用于显示的文字
源数据窗口对象的SQL语句为:
SELECT FEntityNo,
FPriceNo,
FOpeDate,
FOpeUserNo,
FStatus,
FAuditDate,
FAuditUserNo,
FRemark
FROM t_ProductPrice
where FEntityNo = :asEntityNo
其中asEntityNo为提取参数.