我在delphi进行数据库编程时一般使用adoconnection,执行sql一般使用adoquery
这样如果有多个表同时进行操作时,比如
table1中的每条记录和table2中的每条记录进行有条件合成(不是简单的一个sql能办到的),然后添加到table3中,这样岂不是要3个adoquery来执行,是吗?VB中只要定义三个recordset就行了,可是delphi中的adoquery是一个组件,资源是不是比vb要大很多?
这样如果有多个表同时进行操作时,比如
table1中的每条记录和table2中的每条记录进行有条件合成(不是简单的一个sql能办到的),然后添加到table3中,这样岂不是要3个adoquery来执行,是吗?VB中只要定义三个recordset就行了,可是delphi中的adoquery是一个组件,资源是不是比vb要大很多?
解决方案 »
- FFDec——供Delphi使用的视频解码动态链接库
- 竖着站 DBGrid 控件: TVDBGrid ; 出错!!!!!
- 关于COM口的数据通信的问题,各位高手请帮帮忙!
- 做组建的问题
- 散分!今天心情不好!郁闷!
- 请问:能否用SQL语句实现这样的功能?在线等待!!!
- DEPHI中的数学函数,是否有乘方等等高级的函数,在线等待
- delphi 6 安装后执行,出现“无法定位程序输入点@Variants@initialization$qqrv于动态链接库rtl60.bpl上”
- 查询数据库SQL的时候,select *from tablename where fieldname=?????(我要是字段值等于前一个form的edit接受的变量)。变量该怎样书写?
- 非常棒的Detour hook SRC!
- 在多层结构中启动事务.在线!!!!
- <<编译原理>>好学吗??请指点.多谢
在做查询以前动态加载adoquery的DataSource,SQL在使用之后再释放。
DELPHI的执行速度较快,速度不是什么问题,我想是可以忍受的。
而你说的“table1中的每条记录和table2中的每条记录进行有条件合成(不是简单的一个sql能办到的),然后添加到table3中”是可以使用SQL语句实现的
。本人菜鸟一个,说得有什么不对的的地方请大虾见谅。
比如我这样,从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
可以这样写
insert into table2(filed1,filed2)
select sum(filed1),sum(filed2)
from table1
where id=fieldbyname('id').asstring'
whwrb(波波)的表达的意思已经差不多了,但是还是没有脱离delphi这个环境。我们在编程过程中,可以变换一下思路,对大家发现问题、解决问题、提高自己都会有所帮助。以前我写代码的时候,基本上遇到问题时常常也是以delphi为主要工具,这主要是因为delphi用的比较熟了,解决一般问题没有什么难度,所以不想使用其它方法,导致个人走了很多弯路,一直没有多大进步。例如一个系统权限的控制问题(下有160个节点的权限树),更改节点时,需改写三个表、及所有节点下的用户权限纪录,使用delphi可以完成,但需要嵌套很多循环,效率很低,导致点击树节点后系统会等待2-3秒循环才能完成改写库纪录,在速度较慢的计算机上尤其明显,用户等待时间较长。使用存储过程后。同样的功能实现基本没有等待的时间即可完成,有些东东在数据库端实现会给你意想不到的惊喜,试试吧。
在存储过程中可以使用一些比较复杂的逻辑判断和程序流控制,想IF语句和各种循环等等,还有就是游标,可以大大提高可读性
另外,存储过程应该是经过予编译的,也就是说服务器已经对他进行了优化,执行效率应该要高
sql1="select * from t1"
sql2="select * from t2"
adoquery.sql.clear;
adoquery.sql.add(sql1);
adoquery.sql.add(sql2);
不会出错吗?