首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在线程中使用TADOConnection

可以在线程中使用TADOConnection
EN

Stack Overflow用户
提问于 2010-07-16 23:39:46
回答 2查看 6.1K关注 0票数 6

我已经创建了一个TCPip服务器应用程序。应用程序有一个全局TADOConnection。该全局ado连接既用于主线程查询,也用于线程进程内。

这样可以吗?ADOConnection是否具有同时处理多个查询的内置机制?

我的应用程序在测试环境中工作(2-5个连接)。但在生产环境中部署时,当链接到ADOConnection的TADOQuery设置为打开时,我会遇到“无法解释”的访问冲突。

我应该使用ADOConnection,还是所有的查询都应该自己连接到数据库(这可能会占用更多的资源)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-16 23:50:04

每个线程都需要有自己的连接对象。以下链接提供了更多信息:http://delphi.about.com/od/kbthread/a/query_threading.htm

文章中的一些要点:

1]在使用任何dbGo对象之前,必须手动调用CoInitialize和CoUninitialize。调用CoInitialize失败将导致“未调用CoInitialize”异常。CoInitialize方法初始化当前线程上的COM库。ADO是COM。

2]不能从主线程(应用程序)使用TADOConnection对象。每个线程都需要创建自己的数据库连接。

票数 8
EN

Stack Overflow用户

发布于 2010-07-16 23:49:45

@M Schenkel,请参阅此问题Is Delphi’s TADOConnection thread-safe?。每个线程都需要自己的连接,因为ADO是一种基于COM的技术,它使用单元线程对象。

请参阅此示例

代码语言:javascript
复制
procedure TMyThread.Execute;
begin
   CoInitialize(nil);
   try
     try
       // create a connection here
     except
     end;
   finally
     CoUnInitialize;
   end;
end;
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3266532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档