1 工资项目表
      字段 :
            编号      int
            工资名称  str
            工资数据  Float
            工资公式  str编号  工资名称  工资数据  工资公式
1     基本工资   500   
2     奖金                (基本工资 + 岗位工资)*0.5
3     伙食补贴   50
4     住房补贴   50
5     养老保险   80
6     公积金     100
7     岗位工资   100
8     实发工资      基本工资+奖金+伙食补贴+住房补贴-养老保险-公积金+岗位工资现在问题就是如何把工资公式字段里的公式拿出计算,计算完后再把结果保存到本记录的工资数据字段里,请指教。
例子:
比如我现在要计算这个公式,(基本工资 + 岗位工资)*0.5
那我要怎么才能知道或取出基本工资的数据是500,岗位工资的数据是100,
最终显示如下:
编号  工资名称  工资数据  工资公式
1     基本工资   500   
2     奖金       300     (基本工资 + 岗位工资)*0.5
3     伙食补贴   50
4     住房补贴   50
5     养老保险   80
6     公积金     100
7     岗位工资   100
8     实发工资  820   基本工资+奖金+伙食补贴+住房补贴-养老保险-公积金+岗位工资

解决方案 »

  1.   

    通过公式组装SQL语句去计算,将结果再放进去
      

  2.   

    呵呵~~~~~~~~~~~~~~用ADOQuery把公式取出来当作变量插入到SQL语句进行计算,得出的结果再插入到表里就可以了!
      

  3.   

    能否说得详细一点,我还是不太理解,我现在就是想不通,比如:我把这个公式取出来赋值给这个变量Str:=(基本工资 + 岗位工资)*0.5,我把这个公式取出来当作变量这肯定是一个字符类型的变量,我是想说怎么才能知道基本工资的值是500呢?请指教。
      

  4.   

    用ADOQuery查出,基本工资和岗位工资在计算不行??
      

  5.   

    为什么不用SQL语句的update来进行计算?update 工资数据表 set 奖金= (基本工资 + 岗位工资)*0.5
      

  6.   

    --个人思路!仅供参考
    数据库设计
    1.工资表
    CREATE TABLE SALARY(基本工资 int,奖金 int ,岗位工资 int)
    2.公式表
    CREATE TABLE FORMULA(ID INT IDENTITY(1,1) ,FORMULADESC VARCHAR(50),FORMULA VARCHAR(50),A VARCHAR(50),B VARCHAR(50),C VARCHAR(50))
    //说明:A,B,C中存放的是SALARY中字段的名称
    DELPHI实现
    1.
    公式:EDIT --公式内容,若实现上述功能,可写为(A+B)*0.5
    A:基本工资(一般是Combobox)--Combobox中存放字段名称
    B:岗位工资 (一般是Combobox)--Combobox中存放字段名称

    (即用A与B来代替字段名称,形成AB与字段的映射关系)
    2.用间接取数的方式将SALARY中的数据取出,形成字符串'(500+100)*0.5'
    3.写一个存储过程,将该字符串为参数,传入即可!
    存储过程:
    CREATE PROC P_calc
    @FORMULA VARCHAR(100)
    AS
    BEGIN
    DECLARE @RESULT INT,
            @SQL NVARCHAR(100)
    --定义动态SQL语句
    SET @SQL=N'SELECT @RESULT='+@FORMULA
    --计算
    EXEC sp_executesql @SQL,N'@RESULT INT OUTPUT',@RESULT OUTPUT 
    --将计算结果存入结果表
    UPDATE T1
    SET SCORE=@RESULT
    WHERE ID=1   --将奖金字段更新
    END;
      

  7.   

    2.用间接取数的方式将SALARY中的数据取出,形成字符串'(500+100)*0.5'
    间接取数的方式,怎么用呀,不太明白呀,能说清楚点吗?
    我现在就是想不通,比如:我把这个公式取出来赋值给这个变量Str:=(基本工资 + 岗位工资)*0.5,我把这个公式取出来当作变量这肯定是一个字符类型的变量,我是想说怎么才能知道基本工资的值是500呢?请指教。
      

  8.   

    --示意代码!未加测试
    VAR
      I:INTEGER;
      FORMULASTR,STR1:STRING;
    Begin
    With Adoquery1 do
     begin
      close;
      sql.clear;
      sql.text:='SELECT * FROM Salary';
      open;
     end;
    With adoquery2 do
     begin
      Close;
      Sql.clear;
      Sql.text:='SELECT * FROM Formula';
      Open
     end;
    --生成字符串'(500+100)*0.5'
     FOR I:=1 TO LENGTH(FORMULASTR) DO
         BEGIN
          IF FORMULASTR[I] IN ['A'..'Z'] THEN
           BEGIN
             STR1:=STR1+ADOQUERY2.FieldByName(ADOQUERY1.FIELDBYNAME(FORMULASTR[I]).AsString).AsString;
           END;
          IF FORMULASTR[I] IN ['+','-','*','/',')','(']  THEN
           BEGIN
            STR1:=STR1+ FORMULASTR[I];
           END;
         END;
    --执行存储过程
      WITH ADOQuery2 DO
      BEGIN
       CLOSE;
       SQL.Clear;
       SQL.TEXT:=' EXEC TEST :A1';
       Parameters.ParamByName('A1').Value:=STR1;
       ExecSQL;
      END;
       SHOWMESSAGE('公式运算成功');
    End
      

  9.   

    晕,注释写成SQL的了!!:)
      

  10.   

    我现在就是想不通,比如:我把这个公式取出来赋值给这个变量Str:=(基本工资 + 岗位工资)*0.5,我把这个公式取出来当作变量这肯定是一个字符类型的变量,我是想说怎么才能知道基本工资的值是500呢?请指教。
      

  11.   

    晕!!怎么还是没有懂:)
    说白了是用动态SQL语句实现
    您可以这样试一下!
    DECLARE @T VARCHAR(20)
    SET @T='SELECT (1+2)*4'
    EXEC (@T)
    存储过程已经写得很详细了!
      

  12.   

    还是不太理解liangpei2008(逍遥叹)代码的意思,
    不过我的数据库是DBISAM不支持存储过程,后来我直接用数字写入就
      

  13.   

    还是不太理解liangpei2008(逍遥叹)代码的意思,
    不过我的数据库是DBISAM不支持存储过程,后来我直接用数字写入就不用转换了,
    在此谢谢各位,如果有好的办法也请告诉我,我会另外开贴给分.