在Delphi中使用复杂的SQL

在Delphi中要用使用数据库,要使用SQL语句,我想每个稍为用Delphi写过程序的人都会知道怎么用,举个ADO的例子来说

var
 qry : TADOQuery;
begin
  qry := TAdoQuery.Create(nil);
  qry.Connection := cnn;
  qry.SQL.add('select * from ta where id = :id');
  qry.Parameters.ParamByName('id').Value := 123;
  qry.open;
....

如果查询语句比较简单的,那么用上面的方法确实也没有什么问题,但如果SQL语句是比较复杂的,可能就会这个样子了:

sqlcore := 'select age, icdm10, ta.*  from BAGL_BA2 , ( ' +
              'select jzh, riqi, fph, jine, sbje,  nvl(sbje, 0) - nvl(other_sum, 0) as sbsfje, jsfs ' +
              'from fp1 where fpbz <> ''2'' ' +
              'and riqi >= to_date(:bd1, ''yyyymmdd'') ' +
              'and riqi < to_date(:ed1, ''yyyymmdd'') ' +
              'union all select jzh, riqi, yddh, -ydje,sbje, 0 as sbsfje, jsfs from tf ' +
              'where riqi >= to_date(:bd2, ''yyyymmdd'') ' +
              'and riqi < to_date(:ed2, ''yyyymmdd'') ' +
              ') ta where bagl_ba2.jzh(+) = ta.jzh '; 
             
qry.SQL.Add(sqlcore);

或者直接用qry.SQL.Add逐句增加也行,但工作量不会减轻多少(几乎没有区别)。
在这里要注意空格以外,还要注意原来要用引号的地方,特别的麻烦,而且SQL的原排版格式也全废掉了。如果语句日后要作修改的话,那就更加麻烦了。
曾经有几位用PowerBuilder的朋友对我说,他们对Delphi这种方式相当讨厌,因为在PB里面可以内嵌SQL脚本,写SQL语句时相当的舒服,他们老是劝我用PB。但我对使用PB完全没有兴趣,而且我用Delphi也不止是为了写数据库的软件。
最近,我发现一个比较好的解决方法,如某个Form中要用一句比较复杂的SQL语句(不要说要用View,有些时候View不能解决问题的,SP也是一样的道理),那么在这个Form上面加上一个memo控件,把它的visible设为false,另在memo.lines属性中把要写的SQL语句原样贴进去,接着在程序中就这样写

var
 qry : TADOQuery;
begin
  qry := TAdoQuery.Create(nil);
  qry.Connection := cnn;
  qry.SQL.add(memo1.Text);
  qry.Parameters.ParamByName('id').Value := 123;
  qry.open;
....

这样处理之后,要修改SQL的话就直接在memo中改就行了,而且SQL的原排版格式也得以保留,引号的问题也不用特别处理。相当的方便。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值