我在窗体上放了一个TADOConnection和一个TADOQuery控件TADOQuery.Connection设置为TADOConnectionFormCreate事件如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Cnn.ConnectionString:='DBQ=D:\123\Backup.mdb;DefaultDir=D:\123\;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;UID=admin;UserCommitSync=Yes;';
  Cnn.Connected:=True;
end;这个没错。正确连接上了。procedure TForm1.Button1Click(Sender: TObject);
begin
  Query.SQL.Clear;
  Query.SQL.Add('Delete From BackupPath');
  Query.ExecSQL;
  showmessage('ok');
end;procedure TForm1.Button2Click(Sender: TObject);
begin
  Query.SQL.Clear;
  Query.SQL.Add('Select * from BackupPath');
  Query.Open;
  showmessage('ok');
end;   这是两个BUTTON的事件。我先执行Button1Click会显示OK,然后我再执行Button2Click也会显示OK,如果我再执行Button1Click,则会出错,出错代码如下:
Access violation at address 1F453E6E in module 'msado15.dll',Write of address 0117A028.   如果我先执行Button2Click的话会显示OK,再执行Button1Click则也会出错,出错代码同上。
   我的代码应该不会有什么问题吧?为什么一执行查询。再执行删除就会出错呢?   在线等待!

解决方案 »

  1.   

    你在每句前面加上Query.close试试。procedure TForm1.Button1Click(Sender: TObject);
    begin
      Query.Close;  
      Query.SQL.Clear;
      Query.SQL.Add('Delete From BackupPath');
      Query.ExecSQL;
      showmessage('ok');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Query.Close;
      Query.SQL.Clear;
      Query.SQL.Add('Select * from BackupPath');
      Query.Open;
      showmessage('ok');
    end;
      

  2.   

    你分开用两个不同的qurey做做看
      

  3.   

    加了,一样报错。:)是不是ADO有问题?
      

  4.   

    msado15.dll的问题 升级一下ADO UPDATE FOR D6 
    要执行返回数据集前要确定DATASET是否关闭。
    你的BUTTON1 那里要先CLOSE DATASET
      

  5.   

    我用的是DELPHI 7系统是WIN2000我用两个ADOQUERY就不会报错了。一个专门查询,一个专门操作。 :)不会吧?为什么会有这种问题?那位大哥可以告诉我?
      

  6.   

    大哥,去哪升级哇?微软的官方网站?没哇?我就用了这两个控件哇。用QUERY.CLOSE不是全关了么?好像我看书上说。QUERY会自已关闭的吧?
      

  7.   

    你把对象名query改为query1再试一试
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Query1.Close;  
      Query1.SQL.Clear;
      Query1.SQL.Add('Delete From BackupPath');
      Query1.ExecSQL;
      showmessage('ok');
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      Query1.Close; 
      Query1.SQL.Clear;
      Query1.SQL.Add('Select * from BackupPath');
      Query1.Open;
      showmessage('ok');
    end;
      

  8.   

    就是没有用close的问题,执行查询后query处于active状态,这个时候是不能修改sql的。
      

  9.   

    TO: Drate(小虫) 不行哦。只要查找和删除用的是同一个QUERY就会出问题。不同就不会。哪位告诉我在哪下ADO 新版本么?
      

  10.   

    拜托,你用Ado连,为什么用Query呀,还有每次打开Query(AdoQuery)的时候一定要Close呀
      

  11.   

    拜托,你用Ado连,为什么用Query呀,还有每次打开Query(AdoQuery)的时候一定要Close呀
      

  12.   

    用ADO连不用ADOQUERY? 那用什么? 我有CLOSE哇。还是一样。
      

  13.   

    呀,我都快疯掉了。昨天不行的。今天一运行竟然全OK我都不知道哪来的毛病。那要是以后老是这样突然来一下不行不是会被害得好惨? 更惨的事还在后头。
    Query1.Close;
    Query1.SQL.Clear;
      Query1.SQL.Add('Insert into BackupPath (ID,BackPath,PathAttrib) Values ("1","c:\","1")');
      Query1.ExecSQL;这条插入语句没错吧?竟然报错:“参数不足,期待是2”怎么回事哦,有哪位大哥帮忙看看罗。 
      

  14.   

    搞定了。总结一下:  Query1.Close;
      Query1.SQL.Clear;
      Query1.SQL.Add('Insert into BackupPath (ID,BackPath,PathAttrib) Values (:A,:B,:C)');
      Query1.Parameters.ParamByName('A').Value:='2';
      Query1.Parameters.ParamByName('B').Value:='D:\';
      Query1.Parameters.ParamByName('C').Value:='ABC';
      Query1.ExecSQL;  还是不明白。原来用的好好的SQL语句为什么不可以直接插了。   :)
      

  15.   

    把Query改成其它名称不能用对像名命名吧,很容易出错
    在Clear之前要加qry.close