pb datawindow中获取datawindowchild的sql以及dataobject
在实现一个功能的时候,想获取一个数据窗口中的datawindowchild里边sql,然后将sql放到一个datastore中检索,原本的想法是这样的
adw_main.getChild("xxxx",ldwc_temp) lds_temp.dataobject = ldwc_temp.dataobject ls_sql = lds_temp.getsqlselect( )
发现datawindowchild根本就没有dataobject这个属性
通过百度才知道可以直接通过datawindowchild的GetSQLSelect()方法获取 sql
sql是可以获取到了,那问题又来了,如何获取datawindowchild关联的datawindow的名称呢?
查看数据窗口的源码才知道,这个datawindow放在了dddw.name的属性下边
<DW Control Name>.Describe("<Columnname>.DDDW.Name")
<DW Control Name>.Modify("<Columnname>.DDDW.Name=<name of DataWindow used as dddw> ")
这样就可以了 :)
Integer rtncode String ls_nowFld,ls_deptid,ls_sql DataWindowChild fld_child rtncode = dw_1.GetChild("Unit_id",fld_child) //获得Unit_id字段名下拉数据窗口的句柄 If rtncode = -1 Then MessageBox("错误!", "不是下拉数据窗口!") fld_child.SetTransObject(SQLCA) //设置事务对象 ls_sql = Lower(fld_child.GetSQLSelect())// 获得DDDW的SQL语句 // 去除Sql 语句中的Where条件子句, 如原Sql 语句中须有Where条件子句,此处则需进行较 //复杂的处理,应视具体情况而定。 if Pos(ls_sql, " where ")>0 then ls_sql = Left(ls_sql,Pos(ls_sql, " where ")) //重新设置Sql 语句中的Where条件子句 ls_deptid=dw_1.Object.dept_id[GetRow()] //取得当前dept_id选定值 ls_sql = ls_sql + " Where dept_id = '" +Trim(ls_deptid)+"'" //重新设置Sql 语句 fld_child.SetSQLSelect(ls_sql) fld_child.Retrieve()//取得满足条件的数据