工资管理系统中,如果用户需要自己定义工资发放例如:加班工资=加班小时数*2
      工资=基本工资+加班工资疑问:1、如何判断用户输入的公式合法
      2、数据库又如何设计
      3、中文公式如何实现运算?是不是要将中文替换成字母==============================================================================================
在网上查了好多资料也是一头雾水,只知道最简单的方法是用第三方控件Script   Control   来实现
如果有这方面经验的恳求指点下,分不够 我在加~~~

解决方案 »

  1.   

    数据库:表名:Formula
    字段:
    1:strFormulaName   主键   如:加班工资
    2: strFormulaText   公式内容  加班工资*2
    3:tmBegDate        该公式生效日期
    4:tmEndDate        该公式结束日期
    ..................  其他的必要属性判断合法性:比如要看 工资=基本工资+加班工资  这个公式正确性
    公式内容为:基本工资+加班工资 根据+-*/()等公式基本符号分解字符串
    既ss=基本工资 + 加班工资 遇到符号前后都加空格
    dim strSub() as string
    strSub=split(ss)
    判断不是基本符号的项在数据库中是否都存在(最基本的项在数据库中必须事先设定好。)如果不存在,则公式错误。 如果都存在,把不是基本符号的项都转换为随机数。进行运算。3:运算方法 一种可以根据Script  Control  来。
       另一种方法可以通过数据库来 举个例子:
       基本工资 + 加班工资 取出对应的数后 字符串为:ss="2000.5+555"
       strSql="select " & ss & " as Result"
       adoConnection.execute strsql
       rs.fields("Result") 就是计算结果
      
      

  2.   

    可以仿照ACCESS的表达式生成器来做。截张图给你:要点:公式不要由用户直接手工输入,而是由用户点击你预设的公式构成要素来输入。这样公式的有效性和解释就完全由你来控制了。
      

  3.   

    自定义项目,做一个横表,做一个纵表,解释公式,直接用sql语句就能做到了。
      

  4.   

    写出解释公式,用sql语句??
    这样子如何判断公式是否正确呀
      

  5.   

    关键是用户根据你预设的字段设计出公式以后,这个公式有可能有+-*/()等运算符甚至有if then ...等,如果这样子如何判断用户输入的公式合法,如果无法判断,就麻烦大了
      

  6.   

    我猜测应该有写基本的字段,比如基本工资,加班工资,分红等等。这个表格设计好后给一个界面对于这些字段的操作,生成sql.制作的过程应该和报表公式生成的过程差不多
      

  7.   

    一、使用ScriptControl的Eval方法计算表达式,可以。
    二、使用vba6.dll中的API函数EbExecuteLine计算表达式。
    三、使用On Error Resume Next和Err.Number是否为0判断表达式是否合法。
      

  8.   

    16楼的不可行。
    A)EbExecuteLine 是只在 VB-IDE 中有效的“技术”。
    B)Eval 只能用于计算,你要用它校验公式是否可行,那就需要给每个项目预设值。
    由于公式是不确定的,那么项目的预设值很可能导致公式中 A/(B-C) 产生除零错误。自己写表达式解析器就能同时做到定义校验和运算。
      

  9.   


    vba6.dll的api函数EbExecuteLine可以计算表达式,但是不知道能不能支持if..then。。等语句
      

  10.   

    问题已经得到解决,最终采用了ScriptControl的Eval方法计算表达式
    点工程,引用Microsoft Script Control 1.0
    在当前form上面,一个text文本框,用于输入公式 ,一个command1按钮Private Sub Command1_Click()
      Dim script_control As Object
      Set script_control = CreateObject("MSScriptControl.ScriptControl")
      script_control.Language = "VBScript"
      
      Dim s As String
      s = script_control.Eval(Text1.Text)
      MsgBox s
    End Sub
      

  11.   

    提供 delphi7  Socket  三层 开发的 自定义工资公式 源码 支持如下方式,可以内嵌十几个函数运行方法 如(and / or ) 等 ,需要的朋友加QQ:304122340 if((应纳税所得 -  2000) > 0, if((应纳税所得  -  2000) > 0 and  (应纳税所得  -  2000)  < 500 , (应纳税所得  - 2000)  * 0.05, if( (应纳税所得 -  2000)  >= 500 and  (应纳税所得 -  2000)  < 2000 ,(应纳税所得  -  2000) * 0.1 - 25, if((应纳税所得  -  2000)  >= 2000 and  (应纳税所得 -  2000) < 5000  , (应纳税所得 - 2000) * 0.15 - 125, if( (应纳税所得  - 2000)  >= 5000 and (应纳税所得 -  2000)  < 20000 ,(应纳税所得 -  2000)   * 0.2 - 375, if((应纳税所得 -  2000) >= 20000 and (应纳税所得  -  2000) < 40000 ,(应纳税所得-  2000) * 0.25 - 1375,if((应纳税所得 -  2000) >= 40000 and (应纳税所得  -  2000) < 60000 ,(应纳税所得-  2000) * 0.30 - 3375,0)) ) ) ) )  , 0)
      

  12.   

    本人有个自己用Delphi写的自定义公式,公式项目可以自定义多项,且每个项目可以由不同的项目根据不同的条件生成,如果有兴趣可以联系我,邮箱:[email protected]
    例如定义一个实得底薪,在公式里可写成:if(上班天数>=21,实得底薪,基本底薪*(上班天数/21),基本底薪和上班天数是一个项目。
    此自定义公式经测试成功,且目前有支持十几个函数,但可以增加多个函数