以文本方式查看主题

-  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=2245)

--  作者:cpayinyuan
--  发布时间:2009/3/31 11:20:00
--  有谁能做个字段间的计算关系由用户自定义公式的例子?
    在此之前,我们用狐表做的所有项目中,各字段间的运算关系都是固定写在列的DataChanged事件中,或者写在项目的变量事件中。但在实际应用中,有时候这种计算关系并不是固定的,需要在运行程序的时候动态生成,并可能变化。    
   例如,在通用的工资软件中,各字段之间的计算关系是由最终用户自定义的。放到Foxtable中,也就是各字段之间的计算关系不能由软件的开发者在DataChanged中写死。而是允许最终用户在窗口中编辑一个公式,编辑之后保存在某个表里面,然后,系统根据表中保存的自定义公式动态生成DataChanged事件中的代码,即生成了各列之间的计算关系。一般情况下,自定义公式中使用的元素包括:各数字(0-9),+,—,*,/,(),负号,if(如果) 函数。
    狐表作为一个开发工具,相信一定能解决好这个问题。所以,希望哪位老师(或者贺老师若有时间能亲自动手最好),能做个例子,供大家学习!如果这个问题能妥善解决好,狐表的应用会更广泛!用途更广!
[此贴子已经被作者于2009-3-31 11:33:21编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/3/31 11:22:00
--  
呵呵,我昨天看到老程做过了,你可以咨询一下。
是通过Eval函数做的。
--  作者:cpayinyuan
--  发布时间:2009/3/31 11:25:00
--  
以下是引用狐狸爸爸在2009-3-31 11:22:00的发言:
呵呵,我昨天看到老程做过了,你可以咨询一下。
是通过Eval函数做的。

   呵呵,如果程老师已经做好了,就请他上传上来大家共同学习一下吧!看与其他同类软件的功能是否一致。
其他人如果做得比较成功,也希望尽快传上来,期盼学习!
   另外,我很想知道是否支持 括号()和if函数。如果只有加减乘除,没有括号和 if 函数,功能至少会折扣一多半!

   补充:刚刚贺老师说程老师用Eval做的,我查了一下帮助,说EVAL函数采用VBScript语法,好像VBScript中没有if函数,如果是这样,它的功能会大打折扣的,或者说根本无法正常使用.

[此贴子已经被作者于2009-3-31 11:31:29编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/3/31 11:32:00
--  
if then end if do loop while等等,都可以的。
你可以先看看帮助中的Eval函数说明。
[此贴子已经被作者于2009-3-31 11:32:33编辑过]

--  作者:cpayinyuan
--  发布时间:2009/3/31 11:37:00
--  
以下是引用狐狸爸爸在2009-3-31 11:32:00的发言:
if then end if do loop while等等,都可以的。
你可以先看看帮助中的Eval函数说明。
[此贴子已经被作者于2009-3-31 11:32:33编辑过]

    帮助中的说明很简单,根本就没有提到if,更没有提到怎么用.若是可以用,建议您把帮助中的VBScript语法部分认真完善一下.另外,Eval中的if函数,使用方法应该和易表中的差不多吧.即if(表达式,数值1,数值2)的开式,若表达式为真,等于数值1,若为假,等于数量2.对不对?
    补充:我说的不是Eval函数用在if语句中,而是指Eval的参数(表达式)中是否支持if函数.

[此贴子已经被作者于2009-3-31 11:45:16编辑过]

--  作者:czy
--  发布时间:2009/3/31 12:26:00
--  
eval中应该用iif更合适。
如:eval(iif(表达式,值1,值2),……)
[此贴子已经被作者于2009-3-31 12:26:16编辑过]

--  作者:狐狸爸爸
--  发布时间:2009/3/31 12:35:00
--  
我刚刚改了一下Eval函数,以后可以执行简单的代码:

i = 1
If i = 1 Then
   Eval = "壹佰"
Else
   Eval = "贰佰"
End If

Eval就是要返回的值。

你可以补补VbScript的知识:
http://www.microsoft.com/china/vbscript/vbstutor/vbstutor.htm

这些内容,我不会在帮助提供的了。
[此贴子已经被作者于2009-3-31 12:36:25编辑过]

--  作者:cpayinyuan
--  发布时间:2009/3/31 12:46:00
--  
以下是引用czy在2009-3-31 12:26:00的发言:
eval中应该用iif更合适。
如:eval(iif(表达式,值1,值2),……)
[此贴子已经被作者于2009-3-31 12:26:16编辑过]

我的意思就是Eval中支持不支持IIF函数,只要支持就好了.我在帮助中没有看到相关的说明.


--  作者:cpayinyuan
--  发布时间:2009/3/31 12:47:00
--  
以下是引用狐狸爸爸在2009-3-31 12:35:00的发言:
我刚刚改了一下Eval函数,以后可以执行简单的代码:

i = 1
If i = 1 Then
   Eval = "壹佰"
Else
   Eval = "贰佰"
End If

Eval就是要返回的值。

你可以补补VbScript的知识:
http://www.microsoft.com/china/vbscript/vbstutor/vbstutor.htm

这些内容,我不会在帮助提供的了。
[此贴子已经被作者于2009-3-31 12:36:25编辑过]

没有看明白这个例子是什么意思.


--  作者:狐狸爸爸
--  发布时间:2009/3/31 12:50:00
--  
以下是引用cpayinyuan在2009-3-31 12:47:00的发言:

没有看明白这个例子是什么意思.


呵呵,意思是:流程语句都支持了,小小的iif有没有都无所谓了
这样可以高速地动态生成和执行函数了,而foxtable原来的动态自定义函数,是需要编译的,虽然运行速度快,但是编译很费时间,而且不够灵活。

[此贴子已经被作者于2009-3-31 12:50:40编辑过]