以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  动态加载问题  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=94344)

--  作者:xvkewen
--  发布时间:2016/12/21 15:36:00
--  动态加载问题

我想做到程序在启动的时候,可以根据后台数据表中保存的表达式来动态加裁,在Afteropenproject事件下添加以下代码;

Dim cl As DataRow = DataTables("RolesAuthorityControl").Find("Userroles = \'" & _userroles & "\'")
If cl IsNot Nothing Then
    Dim str As String = cl("RunloadFilter")
    DataTables("mainschedule").LoadFilter= str
    msgbox(str)
        DataTables("mainschedule").Load()
End If

 

执行完毕后没有报错,但没有加载到任何数据,但时如果将DataTables("mainschedule").LoadFilter= str代码替换为如下代码,则加载正常;

 

DataTables("mainschedule").LoadFilter ="[ScheduleStu] = \'正常\' and [QAgroup] = \'" & _userteam & "\' and [SamplePrepareStu] = \'false\'"

 

下图是MSGBOX的弹窗,其实Str字符串与"[ScheduleStu] = \'正常\' and [QAgroup] = \'" & _userteam & "\' and [SamplePrepareStu] = \'false\'"相同,难道是Str里面的_userteam不能够执行?


图片点击可在新窗口打开查看此主题相关图片如下:qq截123.jpg
图片点击可在新窗口打开查看

如果此方法行不通,有没有其他别的方法?主要是不想在Afteropenproject事件加载的时候使用过多的静态代码;


--  作者:blackzhu
--  发布时间:2016/12/21 15:42:00
--  
_userteam  没赋值
--  作者:xvkewen
--  发布时间:2016/12/21 15:52:00
--  回复:(blackzhu)_userteam  没赋值

从使用DataTables("mainschedule").LoadFilter ="[ScheduleStu] = \'正常\' and [QAgroup] = \'" & _userteam & "\' and [SamplePrepareStu] = \'false\'"加载正常来看,全局代码的_userteam其实是有赋值的;

 

会不会在Str变量里的表达式,把_userteam就只当作了普通的字符串处理了,没有当作全局变量来取值呢?


--  作者:有点色
--  发布时间:2016/12/21 16:04:00
--  

 字符串不能直接用。

 

 必须动态编译一次,才能得到 _userteam 的值

 

http://www.foxtable.com/webhelp/scr/1487.htm

 


--  作者:xvkewen
--  发布时间:2016/12/21 16:36:00
--  

我在Afteropenproject事件里自定义以下动态函数

dim code as string

code = cl("Runloadfilter")

functions.add("loadstr",code)

functions.complie()

 

 

datatables("mainschedule").loadfilter = functions.execute("loadstr")

 

提示以下错误,怎么办?

 


图片点击可在新窗口打开查看此主题相关图片如下:img_20161221_163433.jpg
图片点击可在新窗口打开查看


--  作者:xvkewen
--  发布时间:2016/12/21 16:47:00
--  回复:(有点色) 字符串不能直接用。 ...

原来是函数写错了;改成这样就没问题了;谢谢你

 

dim code as string

code = “dim str as string =” & cl("Runloadfilter") & vbcrlf

code = code & "return str"

functions.add("loadstr",code)

functions.complie()


--  作者:有点色
--  发布时间:2016/12/21 17:29:00
--  

前面,应该加一句

 

functions.remove("loadstr")


--  作者:xvkewen
--  发布时间:2016/12/21 21:54:00
--  回复:(有点色)前面,应该加一句 function...

如果不用Remove,这个动态函数会一直存储程序里吗?


--  作者:有点色
--  发布时间:2016/12/21 22:53:00
--  
以下是引用xvkewen在2016/12/21 21:54:00的发言:

如果不用Remove,这个动态函数会一直存储程序里吗?

 

如果你重复多次使用此名称的函数,你就必须先remove掉,才能add的,不然会报错。