在线程中使用ADO,出现异常。
在线程中使用ADO,具体做法是:
1、1个ADOCONNECTION连接1个数据
2、在线程中用几个ADOdataset通过一定条件读写ADOCONNECTION连接的数据表。
出现问题:
有的时候不出错。但不知道什么时候出现著名的:access violation at adress xxxx错误。
我看了下,这个时候数据仍然是写进数据表的。但是那个异常确始终抛出,即使你用了try ...except照样报错
比如最简单的一段:
try
ado:=tadodataset.Create(nil);
ado.Connection :=form1.ADO ;
dxskinlistbox5.Items.Clear ;
ado.CommandText :='select * from adress';
ado.Open ;
if not ado.Eof then
labelnetshow.Caption :='zzzzzz'
else
labelnetshow.Caption :='xxxxxx';
for i:=1 to ado.RecordCount do
begin
dxskinlistbox5.Items.Add(trim(ado.fieldbyname('中文名').AsString));
ado.Next ;
end;
ado.Close ;
freeandnil(ado);
except
ado.Close ;
freeandnil(ado);
end;
执行以上语句的时候,在不出错之前毫无问题,但是一旦出错那个错误,那么执行以上语句就是一直报:
access violation at adress xxxx
但是执行以上语句结果是对的,该显示还显示,该写数据库的还是写数据库,结果没有任何问题。
查了一些网友说的:
1、时间长了,adoconnection可能断开了。(我认为,如果断开那么数据就无法操作,现在我不是这种情况,结果正常,所以排除)
2、1个adoconnection最好只连接1个adodataset。(我认为,ADO可以多线程的)
现在感觉好像是加了vmprotect壳引起的问题,但不能确定。
以上救助大家。