以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  代码放在表的备注列中,要什么引用?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=7484)

--  作者:知无
--  发布时间:2010/6/30 8:57:00
--  代码放在表的备注列中,要什么引用?

由于涉及产品的变化,有一些判定用代码要经常做修改,故统一放在表“ABC”的“第三列”备注列中。

但现在要引用参与运算时不时什么处理,请高手指点。

 

如:Tables("ABC").Rows(0)("第三列") 的备注内容为:dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = \'" & e.Datarow("期数") & "\'And [班级] = \'" & e.Datarow("班级") & "\'" )


下列代码可运行:

Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩表")
If e.DataCol.Name = "科目" And e.DataRow.IsNull("科目") = False Then

      Dim CC As String = dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = \'" & e.Datarow("期数") & "\'And [班级] = \'" & e.Datarow("班级") & "\'" )
      e.DataRow("参考人数") = CC    \'“参考人数” 列为整数列

  End If

 

但要是用引用就不行,什么处理?提示数据列转换错误。

 

Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩表")
If e.DataCol.Name = "科目" And e.DataRow.IsNull("科目") = False Then

Dim CC As String = Tables("ABC").Rows(0)("第三列")   \'引用备注列的内容

 e.DataRow("参考人数") = CC    

    \'想达到以下的运行效果:e.DataRow("参考人数") = dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = \'" & e.Datarow("期数") & "\'And [班级] = \'" & e.Datarow("班级") & "\'" )
End If


--  作者:狐狸爸爸
--  发布时间:2010/6/30 9:02:00
--  

代码不是表达式,代码是需要编译才能运行的,你变化的只是条件表达式,并非代码本身,你可以在代码中动态合成表达式。


--  作者:知无
--  发布时间:2010/6/30 9:37:00
--  
我的想法是这样,把一段经常要改的代码,放在表的备注列,用的时候引用过来参与运行,这样避免去改客户端。
--  作者:知无
--  发布时间:2010/6/30 9:46:00
--  

经常要改的代码是涉及产品的多方面参数的变化,条件变化会比较多,只好想这样的方法去处理。

 有什么方法可以取备注列代码内容转换成可运行的代码?


--  作者:狐狸爸爸
--  发布时间:2010/6/30 9:52:00
--  
参考帮助“自定义函数 - 动态函数管理”。
--  作者:知无
--  发布时间:2010/6/30 10:58:00
--  

对动态函数管理不太会,请再指点:

 

如:Tables("ABC").Rows(0)("第三列") 的备注内容为:dt.Compute("Count(姓名)", dr("科目") & " > 0 And [期数] = \'" & e.Datarow("期数") & "\'And [班级] = \'" & e.Datarow("班级") & "\'" )

 

 动态函数名为“ABC” ,以下是参照帮助写的,实在写不好。

Dim Code As String
Code = Tables("ABC").Rows(0)("第三列")  & vbcrlf

Code = Code & "Return "
Functions.Add("ABC",Code)
Functions.Complie()

 

DataColChanged中这样写:

 

Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩表")
If e.DataCol.Name = "科目" And e.DataRow.IsNull("科目") = False Then
    e.DataRow("参考人数") = Functions.Execute("ABC")

   End If


--  作者:狐狸爸爸
--  发布时间:2010/6/30 11:08:00
--  

你要传递参数过去的,e.DataRow,dr,dt等等,都应该作为参数传递过去。

 

不如直接在函数管理中定义好,测试通过后,将函数的代码复制到某个备注列,再删除这个函数,以后启动项目后,就从备注列读取代码并编译。

 

实在不会写就算了吧,你这个想法其实没有实际价值的,动态合成表达式好得多。


--  作者:知无
--  发布时间:2010/6/30 11:33:00
--  

谢谢,再想想看要什么弄