本人最近在做一个小的报价系统,是一个涉及到四则混合运算的价格预算系统。
用access做了个数据表,所有的数据放一个表中,用ado连接到表,用dbgrid显示数据,每个dbgrid中的列对应一个dbedit输入框,用相对应的dbedit输入数据。
这个表包含下面一些列
产品代码,产品名称, 固定条件列:如电费,水费,材料单价,机器折旧,每个工序的材料费(这个工序要用到的材料的大单价,数量,材料合计),制造费用(如工人工资,补贴),还有合计列(当然不仅仅是这些列)这里只是举些例子,手动在dbedit中输入数据后,小计每个工序的价格,然后是各个工序小计价格的总合计,然后输入税率,利润率等一些条件,计算出一个报价并保存,显示在dbgrid中。
本人刚学的delphi,具体的计算代码,不知道采用什么方法好,是用程序计算还是用数据库计算?要注意什么问题呢?
比如如下的计算公式:色母(元/模)=产品净重*色参比率/100*色母单价/1000000应该怎么实现呢,还有更复杂的计算公式,不过都是混合4则运算。
能否请大家给点思路,给点实例。多谢!

解决方案 »

  1.   

    如果公式是开发(设计)时就确定的,可以程序来算
    如果是动态的字符串,运行时才确定的,可以做成sql语句让数据库来完成——否则需要自己实现一个表达式(公式)字符串的计算功能
      

  2.   

    网上有四则运算的组件,把每个计算元素定义为变量,然后把整个计算式传给该组件,然后他会计算整个式子
    sql 语句计算也是可以的
    最后,自己 也可以搞定,就那些运算符,挨个提取出来,并把变量提取出来,自己计算
      

  3.   

    组件的话,到delphibox上找找吧,应该有的,下面有一个段代码,是把符号以及变量都提取到list中,然后你把变量取到值后,再依次从list中读出来,计算为自己的结果procedure SetFeeList(exp: string; list: TStrings);
    var
      i,j,skip:integer;
    begin
      list.Clear;
      j := 1;
      skip := 0;
      for i := 1 to Length(exp) do
      begin
        if exp[i] in ['+','-','(',')','*',':','/'] then
        begin
          if i = j then
            list.Add(Copy(exp,j,i-j+1))
          else
          begin
            list.Add(Copy(exp,j,i-j));
            list.Add(exp[i]);
          end;
          j := i+1;
        end;
      end;
        list.Add(Copy(exp,j,i-1));
    end;
      

  4.   

    谢谢各位的解答,
    我把目前做的程序发上来,请大家指点一下。
    目前我只能做到dbedit中输入数据并在dbgrid中显示,用DBNavigator1控制。现在要实现计算,
    比如色母=q21*s21/100i21/1000000  色粉=j21/1000*s21/100*(q21*v21+r21),而注塑材料费中的
    材料小计=((Q21+R21/V21)*(1-Y21/100)*K21/1000000+(Q21+R21/V21)*Y21/100*X21/1000000+T21+U21)*(1+W21/100)+Z21*AA21+AB21*AC21+AD21。
    该如何实现才是最佳方案呢?
      

  5.   

    用数据库小心有人用恶意代码干掉你的数据,用脚本语言的就更容易干坏事了
    这东西标准处理方式是自己写个parser,然后用逆波兰表达式求值,现在的程序员水平都烂到什么份上了
      

  6.   

    用sql计算是不是还要加个adoquery控件?
      

  7.   

    找到的话能否发给我?[email protected] 
      

  8.   

    有人能给几条sql语句吗。
    列如,色母价格的合计=q21*s21/100i21/1000000。