Delphi 确定在线程中使用TADOConnection吗

Delphi 确定在线程中使用TADOConnection吗,delphi,adoconnection,Delphi,Adoconnection,我已经创建了一个TCPip服务器应用程序。应用程序有一个全局TADOConnection。这个全局ado连接既用于主线程查询,也用于线程化进程 这样行吗?ADOConnection是否有内置机制来同时处理多个查询 我的应用程序可以在测试环境中工作(2-5个连接)。但是部署在生产环境中,在连接到ADOConnection的TADOQuery设置为打开时,我遇到了“无法解释的”访问冲突 我应该使用ADOConnection,还是所有查询都应该自己连接到数据库(这可能会花费更多的资源)?@M Sche

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

这样行吗?ADOConnection是否有内置机制来同时处理多个查询

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


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

@M Schenkel,请参见此问题。每个线程都需要自己的连接,因为ADO是一种基于COM的技术,它使用单元线程对象

看到这个样本了吗

procedure TMyThread.Execute;
begin
   CoInitialize(nil);
   try
     try
       // create a connection here
     except
     end;
   finally
     CoUnInitialize;
   end;
end;

每个线程都需要有自己的连接对象。以下链接提供了更多信息:

文章中的一些要点:

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


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

使用连接池可以提高重复的资源使用率和连接初始化时间。例如,基于OmniThreadLibrary(需要Delphi 2007或更新版本)中的演示应用程序,Thank-将对此进行检查。但首先我会让事情进展顺利,然后我可以担心性能。@jasonpenny-谢谢你指出这一点。谢谢。我甚至认为我可能也读过这篇文章。我会努力重写它。但有一件事:我从来没有得到“CoInitializewasnotcalled”异常。相反,我只是得到访问权限违规。此异常是否可以是“静默”的?请对此进行跟踪。只要两个查询从未同时完成,应用程序是否会运行“良好”?只有在同时连接时才会崩溃?很抱歉耽搁了,我离开了一段时间。很抱歉,在你的评论上我都帮不了你。我总是会遇到“Coilialize未被调用”的例外情况,打这个电话就把事情弄清楚了。关于多个查询,我从来没有遇到过问题,但我怀疑如果多个调用同时进行,可能会出现问题,但我不能确定。谢谢你的推荐。我还是这个社区的新手…非常感谢。看来你和维克·亚当斯在几乎相同的时间写了基本相同的答案。因为没有办法“分享”选票,我想给维克(只有31个声望点)投票会很好。我希望你不要对此持异议。