我在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要大很多?
解决方案 »
- 大虾请教:使用完一个数据集,想在窗体关闭时候释放资源,用close ? free ? active := false ? destroy 呢?
- 帮别人写了个程序,请问如何和对方写个条约,以后维护如何处理?
- 在线等待!FastReport中如何实现用户自定义字段进行打印!马上揭贴!!
- 心煩,散分!!!
- dot net 和 delphi 相结合相结合
- 请各位朋友帮忙解决一个dll 调用问题,立即给分!
- 请问,如何使用com串口协议进行通讯?在线等待
- 难道用locate()就不能实现记录的继续查找吗?非用sql不可吗?为什么没有人回答??谢谢了,各位大侠!!
- 求助,怎样用DELPHI实现远程登陆,成功后跳到指定的网址?
- 再delphi中的文本文件,要把指向文本的末尾该怎么办
- 在多层结构中启动事务.在线!!!!
- <<编译原理>>好学吗??请指点.多谢
在做查询以前动态加载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);
不会出错吗?