delphi线程中操作access数据库经常报内存地址错误解决方法

最近使用delphi开发软件中使用6个线程同时操作access数据库,反应经常无规律报错问题,分析可能是在多线程中操作ACCESS数据库存在问题.通过写了一个多线程数据库测试程序,经过测试发现在多线程操作数据库,需要注意以下3点:
      1.操作ADO前必须使用 CoInitialize(nil) 和操作完成后使用CoUninitialize
      2.必须使用TADOQuery.Create(nil) 不能使用TADOQuery.Create(Self)或TADOQuery.Create(Application)
      3.所有线程TADOQuery不能使用同一TADOConnection进行连接,可以这样用 ADOQuery1.ConnectionString := ADOConnection1.ConnectionString;
   
      经过测试,在不注意以上3点情况下,线程执行10ms时,线程开到6时,就会引起内存地址报错了,如果注意以上3点线程可以开到60个线程.长时间运行稳定
      正确方法例如:
         CoInitialize(nil); //需要引用ActiveX
         ADOQuery1 := TADOQuery.Create(nil);
         try
            with ADOQuery1 do
            begin
              Close;
              ConnectionString := ADOConnection1.ConnectionString;
              SQL.Text := 'select * from  t_captureimage';
              Open;
            end;
         finally
            FreeAndNil(ADOQuery1);
            CoUninitialize;
         end;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值