为什么我的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; 则不会出错. 百思不得其解,恳请高手指点!
先执行如下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; 则不会出错. 百思不得其解,恳请高手指点!
ADOQ.SQL.Add('select * from TUser');
ADOQ.Open;adoq.close;
ADOQ.SQL.Clear;
ADOQ.SQL.Add('insert into TTest values('+QuotedStr('abc')+')');
ADOQ.ExecSQL;
然后再运行程序才不会出现CoInitlize的错误?
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语句
ADOQ.SQL.Add('insert into TTest values("'+QuotedStr('abc')+'")');例如这个代码:
adoquery1.SQL.Add('insert into manager values("'+edit1.Text+'","'+edit2.text+'")') ;
xfgncit98(xfgncit98)提供的代码是对的
所以加不加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;
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;
测试了你写的和我的并没有发现你所说的错误
测试程序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;