以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教文件中列与列,表与表相互计算问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2191)

--  作者:卟离卟弃
--  发布时间:2009/3/24 13:41:00
--  请教文件中列与列,表与表相互计算问题

库存表中有初期数,入库数,出库数,结存数。入,出,结存是表达式列。
入,出列,中的数据都是根据出库表与入库表进行求各,条件是物品代码一样
我现在用的很笨的计算, 结存=初期+入-出
为什么只有第一行才进行了计算,是因为只有第一行才有出与入?没有出入的不进行计算?
想通过代码,只要出,入表中有数据,库存表就自动统计出入数,并计算出结存。
有同有更加简单的办法,统计出入数,并计算得到结存。怎么样写代码?用什么样的事件?

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工具管理.table


--  作者:狐哥
--  发布时间:2009/3/24 14:08:00
--  
最好将:入,出,结存改成数具列
在:datacolchanged中设代码如一点吧:

Dim dr As DataRow = e.DataRow
Select Case e.DataCol.Name
    Case "物品代码"
       dr("入库数") =datatables("工具出库").Compute("Sum(数量)", "[物品代码] = \'" & dr("物品代码") & "\'")
       dr("出库数") =datatables("工具入库").Compute("Sum(数量)", "[物品代码] = \'" & dr("物品代码") & "\'")
    case "入库数","出库数"
       dr(结存) = dr("初期数") + dr("入库数") - dr("出库数")
end  select

然后在工具入库表和出库表的DATACOLCHANGED中设一代码:
Dim dr As DataRow
    dr = DataTables("工具库存").Find("[物品代码] = \'" & e.DataRow("物品代码") & "\'")
    If
dr IsNot Nothing Then 
       
DataTables("工具库存").DataCols("物品代码").RaiseDataColChanged(dr)
    End
If

试试看看

--  作者:czy
--  发布时间:2009/3/24 14:10:00
--  
用表达式列的话要加上IsNull,如:

IsNull([初期数],0)+IsNull([入库数],0)-IsNull([出库数],0)
--  作者:卟离卟弃
--  发布时间:2009/3/24 14:19:00
--  
狐哥,CZY说得也可以,您说得也可以,我知道两种方式有着根本区别
想知道您为什么当时想到的并不是CZY的那种方式?或着说您这样做与CZY的有着那些区别或重要影响(对文件以后操作,更改或实现其它功能)

我是新手,请解说一下。。
--  作者:卟离卟弃
--  发布时间:2009/3/24 14:22:00
--  
我是新手,不知道列用什么格式好。。。。
也还没有完全摸清楚这个软件的“游戏”规则。。
--  作者:狐哥
--  发布时间:2009/3/24 14:23:00
--  
我只是不喜欢用表达式而已,呵呵
如是关联表,CZY版主的代码肯定好啦.
--  作者:狐狸爸爸
--  发布时间:2009/3/24 14:27:00
--  
以下是引用卟离卟弃在2009-3-24 14:19:00的发言:
狐哥,CZY说得也可以,您说得也可以,我知道两种方式有着根本区别
想知道您为什么当时想到的并不是CZY的那种方式?或着说您这样做与CZY的有着那些区别或重要影响(对文件以后操作,更改或实现其它功能)

我是新手,请解说一下。。



因为表达式的函数有限,有时对于一些较为复杂的计算要求,有时会显得无能为力。

其实FoxTable有两种方式来实现计算和统计,一种是利用本章所讲述的表达式,另一种是利用代码;表达式计算速度快,即使10 万行的计算也可以瞬间完成,而且不占据存储空间,只是在运行的时候生成计算结果,但是只能使用函数,且支持的函数有限;而代码虽然没有上述优点,但是却具备无比的灵活性,让您能随心所欲地计算。

知道了两者的优点,那么您肯定也知道选择这两种计算方式的原则了:能用表达式完成的任务,绝不用代码


--  作者:卟离卟弃
--  发布时间:2009/3/24 14:57:00
--  
谢谢!
接着摸索。。。。。。