问题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不久,希望能得到各位大侠的指点,先谢谢了!等待大家大回复!言者有分!

解决方案 »

  1.   

    1.Open()相当于将Active属性设置为true.
    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值的记录才行!
      

  2.   

    这里的[loCaseInsensitive]怎么解释呢?有什么作用呢?
    直接查query的state属性了,这样也学下怎么用delphi的在线帮助