话说来很长!最主要的是关键子找好!以前我做的一个工作核算软件为例,
要求用户可以自定义条件进行计算!但与计算相关的表中有唯一关键子
-----工号!
现建表如下: //js
jslb jssx jszd jsbm jsgs jstj sql_ms
计算类别 计算顺序 计算字段 //计算表名 计算公式 计算条件 //转换的sql描述
1 1 x a b表的y字段+c表的z字段 c表的xy>xxx and d表的yz<xxxx
sql 语句自动生成为select b.gh,b.y+c.z from b,c,d where b.gh=c.gh and c.gh=d.gh and c.xy>xxx and d.yz<xxxx
客户端
Query1:='select sql_ms from js where jslb=1 order by jssx';
query1.open;
while not query1.eof do
begin
query2.sql.text:=query1.fields[0].asstring;
query2.open;
while not query2.eof do
begin
query3.sql.text:='update a set a.x='+Query2.fields[1].Asstring+' where gh=''''+Query2.Fields[0].asString+''''; query3.execsql;
query2.next;
end;
query1.next;
end;
query1.close; //首先明白这两个个循环和表的意思!
难点在于捕捉计算公式转换为SQL描述!
当用户选择不同的表时,我们用TstringList记录所有表!在计算条件完毕时在sql的描述中强行讲所有表以关键字段联系起来!
当增加新的计算公式记得讲TstringList清空!
本程序虽然有点繁琐,但并非很困难,只要仔细,应该没问题!
注意一个问题:
给用户选择的表和字段都应该式中文现实,因此还要建表对照表名,字段的中引文对照表!这点相比不用我罗索!
讲客户的选择转换为sql描述!明白了就好做了!还有就是SQL语句中不能只待计算公式还需关键字,如文中b.gh
query3需要此值!