为什么我的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; 则不会出错. 百思不得其解,恳请高手指点!
解决方案 »
- SPCOMM字符转换的问题,字符串#1 转换为10进制
- 大哥大嫂们看看这里!今天在线等!
- DCOM+中间层ADOStoredProc传递参数无效问题
- 如何让控制焦点回到主窗体?
- fastreport 中的主项数据对应的字段的值变得庞大无比(原值是0,显示出来是23986176)
- dbgrid中的数据被部分修改,我只想把修改过的数据存回数据库,而不想把整个dbgrid再存一遍,大家给个建议先
- 开头IBM广告文字满天飞的效果是如何制作的?
- 这个格式语法如何理解?
- DBCombobox选择前显示为空,选择之后要是不用了怎么再变回空?
- zswang(伴水)(被黑中) ,进来领分!
- 我的电脑连接了个adsl猫,请问那个usb延长线可以最长多长?
- 一个应该很简单的Label控件问题
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;