为什么我的TADOQuery组件在执行完Select后,再执行insert或update就出现内存写错误?
先执行如下A程序:
ADOQ.SQL.Clear;
ADOQ.SQL.Add('select * from TUser');
ADOQ.Open;再执行如下B程序:ADOQ.SQL.Clear;
ADOQ.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
ADOQ.ExecSQL;
时出现错误,具体错误如下:Project Project1.exe raised exception class C0000005 with message 'access violation at 0x1f487cab: write of address 0x0101f020'. Process stopped. Use Step or Run to continue.但如果将B程序换成如下程序:
  ADOQ.SQL.Clear;
  ADOQ.SQL.Add('select * from TTest');
  ADOQ.Open;
  ADOQ.Append;
  ADOQ.Fieldbyname('FTest').Value:='abc';
  ADOQ.Post; 则不会出错.  百思不得其解,恳请高手指点!

解决方案 »

  1.   

    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('select * from TUser');
    ADOQ.Open;adoq.close;
    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
    ADOQ.ExecSQL;
      

  2.   

    还有我的程序为什么每次运行前,非要在设计时期执行一次数据库的查询
    然后再运行程序才不会出现CoInitlize的错误?
      

  3.   

    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('select * from TUser');
    ADOQ.Open;ADOQ.Close;           ////////////////////执行sql语句时TADOQuery必须是关闭的。
    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
    ADOQ.ExecSQL;        ////////////////此处执行了sql语句
      

  4.   

    CoInitlize的错误,不知道,没有听过。不好意思。
      

  5.   

    你把这句代码改为以下的代码试试!
    ADOQ.SQL.Add('insert into TTest values("'+QuotedStr('abc')+'")');例如这个代码:
    adoquery1.SQL.Add('insert into manager values("'+edit1.Text+'","'+edit2.text+'")') ;
      

  6.   

    执行了select 的open再执行insert在中间必须close,否则出错,
    xfgncit98(xfgncit98)提供的代码是对的
      

  7.   

    楼上的,我改成xfgncit98(xfgncit98)的代码后还是一样!!!!!
    所以加不加ADOQ.Close,是没有关系的
      

  8.   

    ADOQ.Close;
    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('select * from TUser');
    ADOQ.Open;ADOQ.Close;
    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
    ADOQ.ExecSQL;
      

  9.   

    ADOQ.Close;
    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('select * from TUser');
    ADOQ.Open;ADOQ.Close;
    ADOQ.SQL.Clear;
    ADOQ.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
    ADOQ.ExecSQL;
      

  10.   

    数据库为ACCESS2k,d6xp2+xp
    测试了你写的和我的并没有发现你所说的错误
    测试程序A(我的)
    with adoquery1 do
       begin
         close;
         sql.Clear;
         sql.Add('select * from tuser');
         try
           open;
         except
         end;
       end;      with adoquery1 do
       begin
         close;
         sql.Clear;
         sql.Add('insert into TTest values('+QuotedStr('abc')+')');
         try
            ExecSQL;
         except
         end;
       end;
    测试程序B(你的):
    adoquery1.SQL.Clear;
    adoquery1.SQL.Add('select * from TUser');
    adoquery1.Open;adoquery1.SQL.Clear;
    adoquery1.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
    adoquery1.ExecSQL;
      

  11.   

    应该是楼主的Delphi安装有问题,楼主还是把卸载再重新安装吧!!!
      

  12.   

    加了close應該不會有什麼問題了,估計是系統本身的問題,如樓上說的Delphi