Foxtable(狐表)用户栏目专家坐堂 → 求改进方法!!


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

主题:求改进方法!!

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


加好友 发短信
等级:小狐 帖子:396 积分:3452 威望:0 精华:0 注册:2013/9/27 9:04:00
求改进方法!!  发帖心情 Post By:2014/12/10 14:43:00 [只看该作者]

我有两个表A,和表B
表A中有一列,是通过表B中的记录公式计算所得到的。。
表B中公式列,举个例子:9+@(x-1.2)*3

For Each ro As Row In tables("表A“).Rows
   Dim dr As DataRow = DataTables("表B").Find("条件……")
   If dr IsNot Nothing Then
      Dim s As String = dr("公式")
      s = "Dim Sum1 As double = " & s.Replace("@", "Math.Ceiling").Replace("x", ro("末端重量")) & vbcrlf
      s = s & "Return Sum1"
      Functions.Add("Sum",s)
      Functions.Complie()
      ro("中转费") = Functions.Execute("Sum")
      Functions.Remove("Sum")
   End If
Next

这个是没问题的。。可是那个速度。。。很令人纠结。。。几百行就要计算很久,这还是测试阶段少量的数据。。。求方法,求改进,越快越好!!

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/12/10 14:45:00 [只看该作者]

为什么要这样一次性遍历所有表计算?   写在DataColChanged事件, 修改那一行的时候就只计算这一行,不是很好么?

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


加好友 发短信
等级:小狐 帖子:396 积分:3452 威望:0 精华:0 注册:2013/9/27 9:04:00
  发帖心情 Post By:2014/12/10 14:53:00 [只看该作者]

设计的计算是一个按钮。。只需要计算查询的数据。。

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/12/10 14:57:00 [只看该作者]

如果是查询出来的数据,直接生成查询表,然后用表达式计算好了.

否则就用代码在DataColChanged事件里计算

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/10 15:41:00 [只看该作者]

 测试了一下,没有办法处理的。

 

 要要公式,就必须动态编译代码。


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


加好友 发短信
等级:小狐 帖子:396 积分:3452 威望:0 精华:0 注册:2013/9/27 9:04:00
  发帖心情 Post By:2014/12/10 16:00:00 [只看该作者]

以下是引用有点甜在2014-12-10 15:41:00的发言:

 测试了一下,没有办法处理的。

 

 要要公式,就必须动态编译代码。


请问能不能在sql server后台直接计算呢?

[此贴子已经被作者于2014-12-10 16:01:00编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/10 16:06:00 [只看该作者]

 不行,Sqlserver也是不能做

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/10 16:09:00 [只看该作者]

如果合成sql语句,再执行,红色代码现在foxtable里面生成,然后发送给数据库运行。

 

 比如合成n句 update {表A} Set 第一列 = 9+Celling(x-1.2)*3 where [_Identify] = 1


 回到顶部