PB实战点滴:重设DDDW的SQLSelect为何导致错误提示?

 

起源:

 

某Datawindow有n个DDDW字段,其AutoRetrieve均设置为True。程序底层希望统一为所有dddw增加Where约束条件,但是又不希望逐一修改其SQL。解决方式就是通过代码对DatawindowChild的SQL进行修改,增加Where约束。

 

dwc.SetSQLSelect(ls_SQL) 

 

调试发现DDDW的SQL被替换成功。但是执行时总是报错:提示说需要SetTransObject。

父Datawindow在Retrieve之前已经设置了Transaction对象,子DDDW理应按照父亲的Transobject自动设置的。

只好修改代码如下:

dwc.SetSQLSelect(ls_SQL)
dwc.SetTransObject(SQLCA) 
如上,在SetSQLSelect之后调用了SetTransObject,运行时依旧报错:提示说需要SetTransObject。郁闷!

察看PB帮助的SetSQLSelect方法使用说明,发现了奥秘:


You must use the SetTrans or SetTransObject method to set the transaction object before the SetSQLSelect method will execute.


原来在SetSQLSelect之前,dwc或者dw必须设置TransObject,在其后设置是不起作用的。

//掉换顺序,搞掂!
dwc.SetTransObject(SQLCA)
dwc.SetSQLSelect(ls_SQL) 

 

你可能感兴趣的:(PB实战点滴:重设DDDW的SQLSelect为何导致错误提示?)