SQL数据库A有以下字段:裁片长,裁片宽,并数,并长,料长,宽幅,刀数,刀数,公式,单位用量
"公式"字段的内容是来之另外一个B库的.目地:                    
单位用量=公式(例:1/(INT(K/(W+0.375)))*(L+0.375)/36*1.03)
问题:
     在"单位用量"的计算中,"公式"字段里描述的公式(1/(INT(K/(W+0.375)))*(L+0.375)/36*1.03,字母对应的字段如下面的叁数说明)在实际编程时如何将公式字段所描述字段运算的代码该如何写请叫了.叁数说明 :
        L-裁片长 ,W-裁片宽 ,TN-并数,TL-并长,ML-料长,K-
宽幅,CN-刀数       INT取整,如INT(5.68)=5

解决方案 »

  1.   

    比较麻烦,简单的说,就是取出一个关键字,然后分析他是干吗的,是操作符,还是变量
    例如:公式 result = a+b;
    那么result可能是你定义的关键字,他的功能是得到结果,他后边的是公式,那么你要定义a代表什么,b代表什么。如果不是一定需要,直接写代码算了。。能将劳动成果转换成效益才是硬道理。
      

  2.   

    想了一晚上,不知这个办法是否可行.
    1:公式字段的内容只用在单个记录录入时使用,并计算出结果.
    var a,b,c,d:integer;
    begin
    b:=20;
    c:=20;
    d:=20;
    edit1.text:='b+c*(c-b)';
    a:=strtoint(trim(edit1.text));
    edit2.text:=trim(inttostr(a));
    end;
    运行时提示:+不是整数型.问题出在无法识别运算符上.请问这个方法跟本就行不通呀.
      

  3.   

    这样的公司计算,一般是比较麻烦的,词法和语法分析,这些写下来比较花费时间的或者借助Tsql的语法特点可以简化处理。declare @sql varchar(1024)
    select @sql='(2*3)+5+(6+7)*2'
    set @sql='select '+@sql
    exec (@sql)
    --输出37带参数的动态sql,你可以使用存储过程sp_executeSql
      

  4.   

    写了个测试,你参考下
    --执行一个运算
    --return -1:失败;运行成功返回运算结果
    --demo
    /*
    declare @intReturn int,@chvErrMsg varchar(120)
    exec @intReturn =
    PrTest 10,20,@chvErrMsg
    select @intReturn,@chvErrMsg
    --返回值40
    */
    alter proc PrTest
    @intHi int,--参数1
    @intWi int,--参数2
    @chvErrMsg varchar(120) output--返回错误提示
    as 
    set nocount on
    begin
    declare @sql Nvarchar(1024)--求解@intHi*2+@intWi
    set @sql=N'select '+cast(@intHi as Nvarchar)+'*2+'+cast(@intWi as Nvarchar)
    declare @intRet int

    exec @intRet =
    sp_executesql @sql,N'@intHi int,@intWi int',@intHi,@intWi
    if @intRet=1
    begin
    set @chvErrMsg='sp_executeSql执行失败!'
    return -1
    end
    end
      

  5.   

    不算太复杂就用这个,当时做的目的是想用在文本公式上,以实现自定义公式,后来没继续做下去http://www.delphiun.com/down_view.asp?id=3159
      

  6.   

    如果只是四则运算,用TScriptControl控件最快了:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, OleCtrls, MSScriptControl_TLB;type
      TForm1 = class(TForm)
        scJs: TScriptControl;
        Memo1: TMemo;
        Memo2: TMemo;
        Label1: TLabel;
        Label2: TLabel;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var
    str:widestring;
    begin
     str:=memo1.Text; //公式
     scJs.Language:='JavaScript';
     memo2.Lines.Add(scJs.Eval(trim(str)));
    end;end.
      

  7.   

    写脚本,调用.
    比如javascript