现有表如下:
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)
///////////////////////////////////
分不够再给。请大家帮忙,我要得很急
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)
///////////////////////////////////
分不够再给。请大家帮忙,我要得很急
解决方案 »
- 如何用delphi将字符分割解析到xml中。。。
- fastreport masterdata 里怎么能显示"勾"
- 我用Lookup 字段,为什么编辑时不会更新,要保存才能更新.要如何解决?
- 请问是不是在delphi7中没有datamodule?
- 请问哪里有带有CheckBox的树控件,哪有左边是树型控件,右边是表格控件的控件?
- 怎样实现两个时间相加、相减
- 如何使DECISIONCUBE可以随数据库改变即时更新
- 有谁知道,哪里可以下载delphi6的补丁!100分酬谢
- 安装了VB6后,原先的DEPHI程序出现字符转换datetime格式时,出现语法错误
- 关于ADO
- 一个比较难得问题,非高手不要进来up
- 如何更改数据库库中字段长度
s:='3*(5-2)/(6-4)+5';
AdoDataset1.close;
AdoDataset1.CommandText := 'select '+s;
AdoDataset1.Open;
f:=AdoDataset1.fields[0].asFloat;--中间加入异常判断
关键是:公式 不是定的。。是给客户保存在数据库中的。。他们自己可以修改。。所以不能按照你这样的方式;
而且客户输入公式的时候还要判断是否正确。
公式没有什么规律。是由客户自己定义的。但是公式里的运算符号只有"+-*/()"
我肯定要判断啊,因为我我看公式是否正确。如果有两个“++”或则“--” 或者只有“(”没有“)”那肯定要判断。
我现在想需要的就是公式判断。。也就是公式编辑器。。客户在定义的时候肯定是选择某个项目编号+另外一个项目编号。
-------------------可以通过数据库异常来判断--------------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;
我试试看。