问题1:
我用的是query组件连接一个表,下面是对该表操作时候的语句:
select: with query do
begin
close;
sql.clear;
sql.add('select * ........ ');
sql.prepare;
open;
end;
这条查询没有问题,但是对于下面的更新操作就有问题了,
insert/update/delete: with query do
begin
close;
sql.clear;
sql.add('查询语句 ');//或者:sql.add('修改语句 ');sql.add('删除语句 ');
sql.ExecSQL;
open;
end;
错误信息是:error creating cursor handle.
在我把open语句删除以后,一切又正常了,但是在DBGrid中却没有新的数据显示,因为query的Active 属性这个时候为false,但是如果想在这里把它改为True,又会出现同样的错误信息.
问题2:
现在要向一个表中插入一批数据,现在我想有两种插入方式,一种是在query close以后,将所有大SQL语句全部都写进去,最后在将query open;另一种方式是每次都将,插入一条SQL语句,具体情况是这样的:
方式一:
with query do
begin
close;
sql.clear;
sql.add('insert ........ ');
.........总共有十条这样的语句
sql.add('insert........ ');
sql.ExecSQL;
end
方式二:
for i:=1 to 10 do
with query do
begin
close;
sql.clear;
sql.add('insert* ........ ');
sql.ExecSQL;
end
请问现在那种情况会更好一点呢?还有没有其它更好大办法呢?问题3:
在语句:if query.locate('sno',edit1.text,[loCaseInsensitive]) then ......中
这里的[loCaseInsensitive]怎么解释呢?有什么作用呢?
小弟刚学DELPHI不久,希望能得到各位大侠的指点,先谢谢了!等待大家大回复!言者有分!
SQL 语句是 SELECT 时,使用 TADOQuery 的 Open() 函数来执行SQL语句。
如果不是 SELECT 语句(比如 INSERT,UPDATE,DELETE等),那么应该使用 ExecSQL() 函数来执行 SQL 语句。
Open()、ExecSQL() 都是执行 SQL 语句,不能一起用的。如果ExecSQL() 成功,DBGrid会出现新数据的,要不然你用ADOQuery1->Requery();刷新数据。
2.如果你Add的SQL语句是一样,当然第二种好,不一样的话你第二种方法怎么做呀?
3.看看DELPHI的帮助吧!If Options contains the loCaseInsensitive setting, then Locate ignores case when matching fields.
就是说要记录中'sno'字段完全符合edit1.text值的记录才行!
直接查query的state属性了,这样也学下怎么用delphi的在线帮助