我是一名技校学生,目前正学习Delphi ,在学习实践中遇到一些问题。听网友说这儿的高手很多,待人热情,乐于助人,尤其关心我们这类新手的成长进步,故特来请教,恳请各位大侠伸出援助之手,帮我检查一下那儿出了问题。我的问题如下:
我的含有SQL删除语句的小程序编译通过,但生成的project运行后下如下的提示框:
Project Projcet1.exe raised exception class EAccessViolation with message‘Access violation at address 00472DB0 in module ‘Project1.exe’.Read of address 00000004’.Process stopped .Use Step or Run to Continue.
小虾的相关源程序如下:
  sqlx:='delete from 工具库存表 where 工具序列号=:工具序列号';
  if messagedlg('确认删除此记录吗?',mtconfirmation,[mbyes,mbno],0)=mryes then
  for i:=0 to listview1.Items.Count-1 do
   if listview1.Items[i].Selected then
    begin 
      with datamoduleado.ADOQuery1 do
        begin
        sql.Clear ;
        sql.Add(sqlx);
        parameters.ParamByName('工具序列号').Value :=edit2.Text  ;
        execsql;
        listview1.Items.Delete(i);
        end;
     end;

解决方案 »

  1.   

    另外请问怎么样让DBGrid根据查询结果的字段值长度自动改变列宽呢?
      

  2.   

    listview1.Items.Delete(i); 该语句有问题,删除后item个数已有变化.
    for i:=listview1.Items.Count-1 to 0 do 把for 循环到写.
      

  3.   

    with datamoduleado.ADOQuery1 do
    begin
      Close; //先关闭
      sql.Clear ;
      sql.Add(sqlx);
      parameters.ParamByName('工具序列号').Value :=edit2.Text;
      execsql;  
    end;
    listview1.Items.Delete(i);
      

  4.   

    for i:=0 downto listview1.Items.Count-1 do
    这样试一试
      

  5.   

    for i:=listview1.Items.Count-1  downto  0 do
    这样试一试
      

  6.   

    listview1.Items.Count的数量每Delete就减少一个,而I却在递增,从而导致问题了,可单步跟一下看,就能查出问题了,程序本身语法我认为没错,但有逻辑错误
      

  7.   

    同意LZGUI(威靈)
    肯定是这个问题
      

  8.   

    支持 LZGUI(威靈)!樓主結貼
     LZGUI(威靈) +1 分,其它的平分了!
      

  9.   

    应当是listview1.Items.Delete(i);
    的问题
      

  10.   

    execsql;
    listview1.Items.Delete(i);
    交换位置看看
    如果不行
    for i:=listview1.Items.Count-1  downto  0 do
    看看
    我出过类型相似的问题,好象就是这样解决的
      

  11.   

    不是去试一试,而是必须改成 for I:=ListView1.Items.Count-1 DownTo 0 do
      

  12.   

    工具序列号=:工具序列号
    字符串怎么能这么写???
    sql server里的sql语句 工具序列号=工具序列号
      

  13.   

    你的Query是不是没用设置Connection属性