ADO线程不安全,UniDAC 在使用MSSQL也是如此。其实这是微软COM问题,不怪Devart公司。

一般解决方法是在线程开始启用 CoInitialize(nil),线程结束调用 CoUninitialize 。如果你使用多种数据库连接,比如三层中经常切换到MSSQL和Oracle,我们只需在判断 TUniConnection 的连接前事件 OnBeforeConnect 写下如下代码:

procedure TServDBFunc.ServConnBeforeConnect(Sender: TObject);
begin
if (ServConn <> nil) and SameText(ServConn.ProviderName,'SQL Server');then
    CoInitialize(nil);
end;

在TUniConnection 的关闭连接后事件 OnAfterDisconnect 写下如下代码:

procedure TServDBFunc.ServConnAfterDisconnect(Sender: TObject);
begin
if (ServConn <> nil) and SameText(ServConn.ProviderName,'SQL Server');then
    CoUninitialize;
end;

需要注意的是,必须先判断连接控件 (ServConn <> nil) 是否为空,否则,你会陷入指针释放的问题。

转自:http://hi.baidu.com/tintinsoft/item/361a8255237b0dc49f266761

http://blog.csdn.net/rznice/article/details/8252775

最新文章

  1. vue-resource请求超时timeout设置
  2. lua协程一则报错解决“attempt to yield across metamethod/C-call boundary”
  3. 转:windows命令行下如何查看磁盘空间大小
  4. 消灭Bug!18款最佳的问题跟踪管理应用程序
  5. spring获取ApplicationContext对象的方法——ApplicationContextAware
  6. ios页面间传递参数四种方式
  7. 下拉列表autocomplete各种实现方式比较
  8. 删除ArrayList中的元素
  9. Oracle连接配置以及实例的备份和恢复
  10. Web开发人员不要错过的60款用户界面设计工具(上)
  11. ARM的启动代码(1):介绍(转)
  12. SEO,搜索引擎优化原理方法等整体把握
  13. js小笔记
  14. Flutter - 本地化启动列表中App名字
  15. AngularJS实现三级Table列表
  16. laravel 连接mongodb
  17. Scheme 4 Javaer-3.高阶函数
  18. chafen
  19. JEECG datagrid 列表检索条件 添加下拉级联功能
  20. jmeter正则表达式提取 引用

热门文章

  1. 最短路算法详解(Dijkstra/SPFA/Floyd)
  2. MySql基本的语法(学习笔记)
  3. Hadoop读书笔记(一)Hadoop介绍
  4. iOS:实现图片的无限轮播---之使用第三方库SDCycleScrollView
  5. 【Codeforces Round #440 (Div. 2) A】 Search for Pretty Integers
  6. 使用SystemC进行硬件仿真
  7. UIButton UIBarButtonItem用法
  8. [CSS] Target empty elements using the :empty pseudo-class
  9. linux 查看 *.a *.so 符号表(zt)
  10. FeatureLayer,FeatureDataset,FeatureClass,Feature的区别与联系总结