with adoquery1 do
begin
  close;
  sql.clear;
  sql.add('delete * from tabel1 where name='+quotedstr(listiew1.items.subitem[i].caption));
  ExceSQL;
end;  提示大概意思因为不是排在数据表第一个数据不能删除错误'at line 1';这样在不行,那好,用下面的,也不提示错误,就是只能删除排在数据表第一位的数据,处于后面的就没有反应,迷糊了;大家帮我看一看是怎么回事情。listiew1.items.subitem[i].caption));提取的字符没有问题,用showmessage有检查过;
with adoquery1 do
begin
  close;
  sql.clear;
  sql.add('select  * from tabel1');
  open;
  //showmessage(listiew1.items.subitem[i].caption);
  if fieldbyname('name').asstring=listiew1.items.subitem[i].caption then
    begin
       delete;
       ExceSQL;
    end;
end;
  

解决方案 »

  1.   

    说说问题吧:with adoquery1 do 
    begin 
      close; 
      sql.clear; 
      sql.add('delete * from tabel1 where name='+quotedstr(listiew1.items.subitem    [i].caption)); 
      ExceSQL; 
    end;  这段中SQL有问题改成 Delete from  Table1 where name= 第二段代码
    with adoquery1 do 
    begin 
      close; 
      sql.clear; 
      sql.add('select  * from tabel1'); 
      open; 
      //showmessage(listiew1.items.subitem[i].caption); 
      if fieldbyname('name').asstring=listiew1.items.subitem[i].caption then 
        begin 
          delete; 
          ExceSQL; 
        end; 
    end; 
      
      这段代码有问题啊,adoquery.open后光标在数据集第一条数据你判断它的name字段值是否等于listview1.items.subitem[i].caption . i不停变动, adoquery的name字段值固定,这样判断是在不知道有啥意义。
       当相等时 你  Delete 后应该post ,至于EXceSQL 是执行非返回型SQL,你又没有 Update之类的SQL
     
       
      

  2.   

    第一种方法,从代码上看不出问题,这需要结合整体程序去看
    第二种方法,你写的很有问题
    Open之后,如果满足条件,直接delete,此时数据集指向第一条记录,delete肯定是删除第一条,奇怪的就是delete后的ExceSql,如果不出错才奇怪呀,因为根本没有可以去Exce的sql语句
      

  3.   

    listiew1.items.subitem[i].caption  这段取值也让我有点奇怪listview1.Items[0].SubItems[1]  起码也该这样取啊
      

  4.   

    楼上几位说的基本差不多了
    第一段注意listview的取值方法。
    第二段注意循环。