现有表如下:
id  项目编号(唯一)   项目名称     值(float类型)
1   10000              项目1        44.4
2   10001              项目2        55
3   10003              项目3        100
我现在有一个表,数据是从上表中提出来的。然后产生计算公式(计算方式有+-*/()).计算公式可以变化。所以我把计算公式保存在表中。我的想法如下:
报表计算的表:
id      顺序      子项目编号   名称(上表的项目编码) 
1       1          10000       项目1
2       2          *           
3       3         (           
4       4          10002       项目2
5       5          +
6       6          10003       项目3
7       7          )
//////////////////////////////
现在我遇到的问题是:
1、如果根据保存到表的计算公式判断公式的合法性。
如同时出现两个“+”或则“(”不正确。
2、公式正确后。我把子项目编号和计算共市换成,一个正确的数字类型如上公式应该是这样:
44.4*(55+100)
///////////////////////////////////
分不够再给。请大家帮忙,我要得很急

解决方案 »

  1.   

    既然你是个数据库,就用一个能使用SQL语句的数据集控件就可以了。大体做法如下:
    s:='3*(5-2)/(6-4)+5';
    AdoDataset1.close;
    AdoDataset1.CommandText := 'select '+s;
    AdoDataset1.Open;
    f:=AdoDataset1.fields[0].asFloat;--中间加入异常判断
      

  2.   

    jinjazz(近身剪(N-P攻略)) :
    关键是:公式 不是定的。。是给客户保存在数据库中的。。他们自己可以修改。。所以不能按照你这样的方式;
    而且客户输入公式的时候还要判断是否正确。
      

  3.   

    hellolongbin(一个人):
    公式没有什么规律。是由客户自己定义的。但是公式里的运算符号只有"+-*/()"
      

  4.   

    jinjazz(近身剪(N-P攻略)) :
    我肯定要判断啊,因为我我看公式是否正确。如果有两个“++”或则“--” 或者只有“(”没有“)”那肯定要判断。
      

  5.   

    公式计算先要将编号用项目的值来替换,然后使用SQL语句来计算,公式判断自己做一个,公式用一个字段来保存,不需要保存到不同的字段。
      

  6.   

    afei78223(阿飞) :
    我现在想需要的就是公式判断。。也就是公式编辑器。。客户在定义的时候肯定是选择某个项目编号+另外一个项目编号。
      

  7.   

    我肯定要判断啊
    -------------------可以通过数据库异常来判断--------------procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
      s:='10*(3)-+6)';
      Adoquery1.SQL.Text:='select '+s;
      Adoquery1.Close;
      try
      Adoquery1.Open;
        showmessage(Adoquery1.Fields[0].Asstring);
      except
        showmessage('语法错误');
      end;
    end;
      

  8.   

    jinjazz(近身剪(N-P攻略)) ( ):
    我试试看。