对list操作下标溢出。例list控制只有16行,而你对16行进行操作则会发生以上操作,注list控件下标从0开始

解决方案 »

  1.   

    各位大虾请关注
    procedure TForm6.BitBtn_rightClick(Sender: TObject);
    var I:integer;
     str:string;
    begin
      for i := 0 to (ListBox_left.Items.Count - 1) do
         begin
            if ListBox_left.Selected[i] then
              begin
               str:=listbox_left.items[i];          listbox_right.Items.add(listbox_left.items[i]);
                listbox_left.Items.Delete(listbox_left.ItemIndex);
              end;
         end;
     with query4 do
      begin
      close;
      sql.clear;
      sql.add('update userguanli_3 set flag=1 where butn=:str');
      execsql;
      end;
    end;
      

  2.   

    sql 语句报错execsql;
      
      

  3.   

    sql.add('update userguanli_3 set flag=1 where butn=:str');
    这一句语法有问题如果str是参数的话,你要
    query4.Parameters.ParamByName('str').Value:=str;或
    sql.add('update userguanli_3 set flag=1 where butn='+str);
      

  4.   

    很明显的索引越界,因为你删除了listbox_left中的一个元素,所以如果原来有16个,现在只有
    15个了,当它访问第16个的时候,就会出错!