我目前使用以下代码执行多条删除,但是发现选择比较多时,
    速度太慢,不知各位大侠有什么高招?来者有分。
    if DBGrid.SelectedRows.Count > 1 then begin
      for i := 0 to DBGrid.SelectedRows.Count - 1 do begin
        ADOQuery.GotoBook(Pointer(DBGrid.SelectedRows.Items[I]));
        ADOQuery.Delete;
      end;
    end;

解决方案 »

  1.   

    感觉用循环肯定是会比较慢一点的。我想能否用SQL中的where子句,把符合条件的都删除掉?不过这样好象难以行得通,关注中……
      

  2.   

    delete只能删除一条纪录吧~~~~如果在一个表中,有许多需要删除,那你可以尝试把需要保留的内容先提出来,然后清空原始表,在把保留数据回填~这样每一个操作都是纪录集操作~速度肯定会提高~
      

  3.   

    o ,楼主,你删除的内容看看他有没有规律,就象一个大班上的学生资料,随后选择的可能是其中一部分人的数据,这样你可以根据关键字用 between and 语句;
    但是要是任意选择估计始终都要做一个循环。
      

  4.   

    用selectedrows应该就这种方法大批量得还是用sql删除比较快!
      

  5.   

    delete from tablename where [...]
      

  6.   

    要是有规律的删除的话用“delete from...”是可以的,效率高,如果不是就
      

  7.   

    物理删除 “truncate table 表名” 速度快,但数据不能回滚;
    逻辑删除  “ delete from 表名” 速度慢,但数据可以回滚;
      

  8.   

    不知道李维的delphi7.0高效数据库管理上有没有介绍啊
      

  9.   

    如果你是要删除表中所有数据你可以用TRUNCATE TABLE TABLENAME
    如果你只是删除表中的部分满足某些条件的记录,你可以用DELETE FROM TABLENAME WHERE 。。当然这时你必需用到的数据源控件就是QUERY。
      

  10.   

    如果你是要删除表中所有数据你可以用TRUNCATE TABLE TABLENAME
    如果你只是删除表中的部分满足某些条件的记录,你可以用DELETE FROM TABLENAME WHERE 。。当然这时你必需用到的数据源控件就是QUERY。
      

  11.   

    将选择的放入一个链表中(应该有主键吧),选择完成后对链表进行循环,用sql语句来对符全条件的记录进行删除,最后刷新数据的结果集,不要用delete
      

  12.   

    imageonline(不交房租) 的想法我试了,速度差不多,会稍微快一点点。
    谢谢各位的支持。