以前用pb,初学Delphi。请教:ADOConnection连接数据库,ADOQuery添加记录,第一次成功,只要再按一次,立即出现错误提示:Access violation at adress xxxxxxxx in module '应用程序名称'.Read of adress 00000000
    胡乱看书,记得Query执行什么不返回结果集,又有什么不能执行insert update delete命令,不知如何解决?    苦恼万分!请各位大力支持!

解决方案 »

  1.   

    不知道你怎么写的sql
    更不知道 “胡乱看书,记得Query执行什么不返回结果集,又有什么不能执行insert update delete命令,不知如何解决?”
    这个你是从哪本书上看的ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('insert into userlist (username,password) values("2","3")');
    ADOQuery1.ExecSQL;
      

  2.   

    你两次插入的是相同的值?
    ~~~~~~~~~···如果设置了主码
    检查一下是否存在相同的就是先select一下看有没
      

  3.   

    返回的是 Access violation, 是不是对像被释放了哈, PB 没有分配/释放说
      

  4.   

    感谢各位!
    但各位所作的设想我都已试过了。结果一如既往。语句如下:
      ADOQuery.Close;
      ADOQuery.SQL.Clear;
      ADOQuery.SQL.Add('insert into book values(:account,:bookname)');
      ADOQuery.Parameters.ParamByName('account').Value:=Edit_account.text;
      ADOQuery.Parameters.ParamByName('bookname').Value:=Edit_bookname.Text ;
      try
        ADOQuery.ExecSQL;
        MessageDlg('图书添加成功!!', mtInformation, [mbYes], 0);
      except
        MessageDlg('数据没有正常提交!!', mtInformation, [mbYes], 0);
      end;
      ADOQuery.Free;
    执行,第一次完全正常,提示“图书添加成功!”,此时察看book表,确实也添加了记录。接着更改Edit_account和Edit_bookname的文本内容,再次执行,报错!!!郁闷不已!!
      

  5.   

    等等。我试试happyhong(虾皮红) 兄台的ADOQuery1.CLOSE。
    我的程序里用的是ADOQuery1.free,而不是ADOQuery1.CLOSE。
    也许问题就出在这里!!
      

  6.   

    哈哈,解决了!! 天下一片宁静。
        下一个问题我想请问:happyhong(虾皮红)兄,Free和close有什么区别?为什么我用Free会出现这个提示呢?
        20分归您了。
        谢谢大家!
      

  7.   

    Free和close有什么区别?
    free把对象都释放了,下次在查询当然会报错了,CLOSE只是把数据集关闭而已