我在delphi进行数据库编程时一般使用adoconnection,执行sql一般使用adoquery
这样如果有多个表同时进行操作时,比如
table1中的每条记录和table2中的每条记录进行有条件合成(不是简单的一个sql能办到的),然后添加到table3中,这样岂不是要3个adoquery来执行,是吗?VB中只要定义三个recordset就行了,可是delphi中的adoquery是一个组件,资源是不是比vb要大很多?

解决方案 »

  1.   

    我感觉可以考虑动态加载。
    在做查询以前动态加载adoquery的DataSource,SQL在使用之后再释放。
    DELPHI的执行速度较快,速度不是什么问题,我想是可以忍受的。
    而你说的“table1中的每条记录和table2中的每条记录进行有条件合成(不是简单的一个sql能办到的),然后添加到table3中”是可以使用SQL语句实现的
    。本人菜鸟一个,说得有什么不对的的地方请大虾见谅。
      

  2.   

    反正我现在用了3个adoquery,不知道怎么优化
      

  3.   

    你用一个呀,将你所有的SQL 合成一个就行 了,实际上在adoquery或者query中,直接用SQL 来实现,而可以把adoquery或者query看成一个载体,用这个控件来执行SQL 而已
      

  4.   

    vb ado=delphi ado,所以vb有的delphi一般也有,你不习惯用adoquery可以用adorecordset吗
      

  5.   

    to whwrb
       比如我这样,从table1表中逐条取记录,然后在table2中汇总这条记录,怎么用一个query来实现,我是这样做的adoquery1 adoquery2
    sqlstring:='select * from table1';
    with adoquery1 do
    begin
    sql.clear;
    sql.add(sqlstring);
       while not adoquery1.eof do
       begin
        sqlstring1:='select * from table2 where id=fieldbyname('id').asstring';
         adoquery2.sql.clear;
         adoquery2.sql.add(sqlstring1);
    ...
     是不是非要用2个adoquery
      

  6.   

    你的 sqlstring1 是个什么 语句呀
    可以这样写
    insert into table2(filed1,filed2)
    select sum(filed1),sum(filed2)
    from table1
    where id=fieldbyname('id').asstring'
      

  7.   

    建议编写存储过程,实现上述代码相对delohi效率会高很多。
    whwrb(波波)的表达的意思已经差不多了,但是还是没有脱离delphi这个环境。我们在编程过程中,可以变换一下思路,对大家发现问题、解决问题、提高自己都会有所帮助。以前我写代码的时候,基本上遇到问题时常常也是以delphi为主要工具,这主要是因为delphi用的比较熟了,解决一般问题没有什么难度,所以不想使用其它方法,导致个人走了很多弯路,一直没有多大进步。例如一个系统权限的控制问题(下有160个节点的权限树),更改节点时,需改写三个表、及所有节点下的用户权限纪录,使用delphi可以完成,但需要嵌套很多循环,效率很低,导致点击树节点后系统会等待2-3秒循环才能完成改写库纪录,在速度较慢的计算机上尤其明显,用户等待时间较长。使用存储过程后。同样的功能实现基本没有等待的时间即可完成,有些东东在数据库端实现会给你意想不到的惊喜,试试吧。
      

  8.   

    SuperDG(Duke) 说的对,我也推荐使用Stored Procedure,你的一个exec就可以让server把所有的东西一次性干完,更加快捷安全,而且对于一些操作(如银行转帐,要避免脏读和脏写还要确保要么完成要么就不做)需要用事务来保证数据的一致性完整性和有效性,这时就要用存储过程。
    在存储过程中可以使用一些比较复杂的逻辑判断和程序流控制,想IF语句和各种循环等等,还有就是游标,可以大大提高可读性
    另外,存储过程应该是经过予编译的,也就是说服务器已经对他进行了优化,执行效率应该要高
      

  9.   

    可以在一个adoQuery里面写三条语句!
      

  10.   

    怎么写
    sql1="select * from t1"
    sql2="select * from t2"
    adoquery.sql.clear;
    adoquery.sql.add(sql1);
    adoquery.sql.add(sql2);
    不会出错吗?