Foxtable(狐表)用户栏目专家坐堂 → 代码放在表的备注列中,要什么引用?


  共有12507人关注过本帖树形打印复制链接

主题:代码放在表的备注列中,要什么引用?

帅哥哟,离线,有人找我吗?
知无
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:404 积分:4234 威望:0 精华:0 注册:2008/9/1 17:14:00
代码放在表的备注列中,要什么引用?  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/6/30 9:02:00 [只看该作者]

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


 回到顶部
帅哥哟,离线,有人找我吗?
知无
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:404 积分:4234 威望:0 精华:0 注册:2008/9/1 17:14:00
  发帖心情 Post By:2010/6/30 9:37:00 [只看该作者]

我的想法是这样,把一段经常要改的代码,放在表的备注列,用的时候引用过来参与运行,这样避免去改客户端。

 回到顶部
帅哥哟,离线,有人找我吗?
知无
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:404 积分:4234 威望:0 精华:0 注册:2008/9/1 17:14:00
  发帖心情 Post By:2010/6/30 9:46:00 [只看该作者]

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

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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/6/30 9:52:00 [只看该作者]

参考帮助“自定义函数 - 动态函数管理”。

 回到顶部
帅哥哟,离线,有人找我吗?
知无
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:404 积分:4234 威望:0 精华:0 注册:2008/9/1 17:14:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2010/6/30 11:08:00 [只看该作者]

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

 

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
知无
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:404 积分:4234 威望:0 精华:0 注册:2008/9/1 17:14:00
  发帖心情 Post By:2010/6/30 11:33:00 [只看该作者]

谢谢,再想想看要什么弄


 回到顶部