F
flexitime
Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi中要用使用数据库,要使用SQL语句,我想每个稍为用Delphi写过程序的人都会知道怎么用,举个ADO的例子来说 <br><br>var <br> qry : TADOQuery; <br>begin <br> qry := TAdoQuery.Create(nil); <br> qry.Connection := cnn; <br> qry.SQL.add('select * from ta where id = :id'); <br> qry.Parameters.ParamByName('id').Value := 123; <br> qry.open; <br>.... <br>如果查询语句比较简单的,那么用上面的方法确实也没有什么问题,但如果SQL语句是比较复杂的,可能就会这个样子了: <br><br>sqlcore := 'select age, icdm10, ta.* from BAGL_BA2 , ( ' + <br> 'select jzh, riqi, fph, jine, sbje, nvl(sbje, 0) - nvl(other_sum, 0) as sbsfje, jsfs ' + <br> 'from fp1 where fpbz <> ''2'' ' + <br> 'and riqi >= to_datebd1, ''yyyymmdd'') ' + <br> 'and riqi < to_dateed1, ''yyyymmdd'') ' + <br> 'union all select jzh, riqi, yddh, -ydje,sbje, 0 as sbsfje, jsfs from tf ' + <br> 'where riqi >= to_datebd2, ''yyyymmdd'') ' + <br> 'and riqi < to_dateed2, ''yyyymmdd'') ' + <br> ') ta where bagl_ba2.jzh(+) = ta.jzh '; <br> <br>qry.SQL.Add(sqlcore); <br>或者直接用qry.SQL.Add逐句增加也行,但工作量不会减轻多少(几乎没有区别)。 <br>在这里要注意空格以外,还要注意原来要用引号的地方,特别的麻烦,而且SQL的原排版格式也全废掉了。如果语句日后要作修改的话,那就更加麻烦了。 <br>曾经有几位用PowerBuilder的朋友对我说,他们对Delphi这种方式相当讨厌,因为在PB里面可以内嵌SQL脚本,写SQL语句时相当的舒服,他们老是劝我用PB。但我对使用PB完全没有兴趣,而且我用Delphi也不止是为了写数据库的软件。 <br>最近,我发现一个比较好的解决方法,如某个Form中要用一句比较复杂的SQL语句(不要说要用View,有些时候View不能解决问题的,SP也是一样的道理),那么在这个Form上面加上一个memo控件,把它的visible设为false,另在memo.lines属性中把要写的SQL语句原样贴进去,接着在程序中就这样写 <br><br>var <br> qry : TADOQuery; <br>begin <br> qry := TAdoQuery.Create(nil); <br> qry.Connection := cnn; <br> qry.SQL.add(memo1.Text); <br> qry.Parameters.ParamByName('id').Value := 123; <br> qry.open; <br>.... <br>这样处理之后,要修改SQL的话就直接在memo中改就行了,而且SQL的原排版格式也得以保留,引号的问题也不用特别处理,相当的方便。 虽然有点浪费的问题,但我觉得这点内存的消耗对比消耗时间来整理SQL语句要划算得多。