关于query的问题,请教高手!(100分)

  • 主题发起人 主题发起人 dingdingdang
  • 开始时间 开始时间
D

dingdingdang

Unregistered / Unconfirmed
GUEST, unregistred user!
我要完成sql操作,在query里输入如下代码:
query5.active:=false;
query5.SQL.Clear;
query5.SQL.Add('insert into depcount1(depname,countno) select DISTINCT depname,count(*) from yuangong2 group by depname;');
query5.Prepare;
table4.active:=true;
dbgrid2.Refresh;
query5.open;

(其中输入其他sql代码后,也是一样)

运行程序时,系统自动提示:"Error Creating Cursor Handle!"
不能完成正常的sql操作,请问是何缘故?
 
你把query的那个什么属性(E太差了,忘记怎么拼了好象是..就是那个希望返回值能进行修改,而把它设为true的那个)
修改为false就行了。
 
dbgrid不用刷新的,它是数据感知控间,我建议把dbgrid2.refresh删除,或把dbgrid2.refresh
和query5.open换个顺序
 
不知道 query5 和 table4 是什么关系。
还有就是 insert 之后是 exesql 才把数据返回给 表的。
然后再用 select * from …… 来open
 
table4.DisableControls;
table4.close;
query5.active:=false;
query5.SQL.text := ' insert into depcount1(depname,countno) '
+ ' select depname,count(*) from yuangong2 group by depname ';
query5.Prepare;
query5.exesql;
table4.active:=true;
table4.EnableControls;

 
sql.text and sql.add 有什么不同?
 
sql.text是一个字符串列表,可以通过直接修改text的值而改变sql语句,
也可以通过add方法,一句一句的添加。
 
如果我的sql很长就用sql.text如
query5.SQL.text := ' insert into depcount1(depname,countno) '
+ ' select depname,count(*) from yuangong2 group by depname ';
如果我的sql很长也可以用sql.add如
query5.SQL.add :=('insert into depcount1(depname,countno)');
query5.SQL.add :=('select depname,count(*) from yuangong2 group by depname');
query5.SQL.add :=('...');//这是一行一行运行的对吗?
 
//table4.active:=true
insert ,update,delete 应该是execsql
 
数据库对SQL的执行是以一个事务而执行的,不会一行一行执行。
首先是delphi编译器将SQL语句一条一条读入(add方法)一个变量中,
接下来Prepare方法是对读入的SQL进行解析、优化,生成最优的代码(这一步可在服务器上执行,也可在本地执行),
等到execsql时将这条优化的代码发送到数据库服务器上去执行,并将结果返回
 
1. query5.Prepare;
这一行没有必要了

2.***** query5.open; *****
应改为 query5.Execsql;

insert ,update,delete 应该是execsql


 
后退
顶部