背景:我们公司的工艺员以前都是用Excel表做工艺文件,而且VBA函数用的很好。核心技术就是excel里计算当前该列的时候,可以通过VBA函数可以找到其他Execl表的列的数据做为变量并且可以用VBA提供复杂的公式函数来计算。缺点数据就是太离散,没有数据库。
现在是我们要做成软件,我的设计思路的是提供一个软件平台尽量模仿Excel ,把以前他们的Excel 表,做成数据表,但是以前的那种VBA计算方式,就没法实现。(不知道各位有没办法实现?)所以我想我提供一个平台,让技术人员可以自己选择定制需要计算的表的字段,并且提供一个让客户自己输入计算该字段的公式内容的地方。然后运行程序,完成对该表字段的数据更新。
  这里我问问大家有没有好的设计思路来解决?
我现在想了个方案,具体实现起来很有难度,请教大家了!设计原理:培训他们使用sql,因为数据库可以提供复杂的科学函数。
         然后分拆sql 例如 update table set 字段 =’ 这里让他们填写 ’
         做成一个输入界面让他们填写,然后程序运行sql来完成。
技术人员在填写过程中用到很多表里的数据,就像某Excel 表的列。我把它们事先做成变量放在内存里,在填写过程中可以直接引用。 差数表: table_1 ,产品编号 ,铜直径,比重,价格… 
table_2:产品编号,pvc绝缘厚度 ,比重,价格…. 
table_3:产品编号,钢带厚度,比重… 
      
要运算的型号数据表 table_a: 产品编号,产品名,型号,         
          …… 
结果表:table_a1:产品编号,铜料,pvc料,钢带料… 
   
表之间的关系是:table_a1产品编号由table_a提供,table_a1.铜料是根据产品编号到table_1查到铜的直径,然后根据相关公式算铜料。Table_a1.pvc料也是这样的。 
             
1.基础表:表,字段可以增加或者删除,结果表:字段可以增加或者删除。 
2.table_a1字段的数据来源是取基础表里,任意表字段组合 
   Eg: table_a1.铜料= (铜直径)*公式系数
         可以 table_a1.字段=table_1.字段+(table_2.字段*table_3.字段) 
    我这里特别要说明我的意图一下:   
我想:
第一步:首先我想定让技术人员制变量数据:
  a.命名表之间关联变量:把当前要运算的产品型号赋予它。
b.技术员在选择界面里选择特定的表和字段,where 部分 : table.字段=关联变量
然后运行sql得出的数据做成:(变量名(table.字段),数据)放入内存堆栈里。
 Eg: select铜直径,比重,价格from table_1. 产品编号=当前产品型号。得到数据后然后做成java变量。table_1.铜直径=铜直径,同样table_2.PVC绝缘厚度,table_3.钢带厚度. 
C. 把内存堆栈变量名读取出来,放入一个列表框里。
    “table_1.铜直径” 
  “table_2.PVC绝缘厚度”
“table_3.钢带厚度”
第二步:在字段公式界面里,选择上面的变量,利用sql 语句来填写
Eg: 铜料界面输入: case (V_商品编号=’XX’) then isnull(table_1.铜直径,0)* isnull(table_1.铜直径,0)*3.14 + 系数
      pvc料界面输入:isnull(table_2.PVC绝缘厚度,0)*公式 
   钢带料界面输入:isnull(table_3.钢带厚度)*公式 
第三步:把刚才输入的 sql 读出来,把选择的变量((table_1.铜直径,table_2.PVC绝缘厚度)在内存堆栈查找提取出相应的数据。(0.15,3.2)进行转化.就成为
      铜料: case (V_商品编号=’00012235’) then isnull(0.15,0)* isnull(0.15,0)*3.14 + 系数
     pvc料界: isnull(3.2,0)*公式 
        ……
这样 update table_a1 set铜料=’ case (V_商品编号=’00012235’) then isnull(0.15,0)* isnull(0.15,0)*3.14 + 系数 ‘and   pvc料=’ isnull(3.2,0)*公式 
Where  产品型号=‘00012235’第四步:运行run sql .      实现的效果是: 
    1.结果表(table_a1)表中字段的都可以设定计算公式 
    2.设定公式可以通过开发一个输入界面来完成,这样灵活性,维护性好 
难点: 
   1.我这种设计方式设计理念是否可以行? 
      2. 第三步 变量转化,我觉得很麻烦:要用字符串里出来。不知道各位有没有好办法?
   2.老实说,想归想,具体实现我也困惑,因为以前从来没这么做过,请教各位,能否提供一些思路。
   3.大家能否提供相似的设计例子?小弟先谢了!