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

在线程中使用TADOQuery
EN

Stack Overflow用户
提问于 2011-02-14 15:12:17
回答 2查看 1.6K关注 0票数 1

我正在编写应用程序,将其连接到DB,并重复(1分钟间隔)从数据库读取数据。它类似于RSS提要阅读器,但使用的是本地DB。如果数据读取失败,我将尝试重新建立连接。我把TADOConnection和TADOQuery放在表单上(所以没有动态创建)来设计它。我的目的是从用户的角度来保持应用程序“活动”,因此我将连接和读取部分放在一个线程中。问题是,怎样才能做到最好呢?

我的设计如下:

在一个单独的线程(TADOConnection)

  • if中,
  • 应用程序启动,TADOConnection和TADOQuery与表单
  • 打开连接一起创建连接,挂起连接线程,启动表单上的计时器,如果读取线程成功,没有发生任何事情,表单定时器继续运行,线程会周期性地恢复另一个线程以读取
  • ,如果它失败,线程将停止计时器并恢复连接线程

是更好的动态创建TADOConnection或TADOQuery,还是不重要?是否最好在线程或其他东西中使用关键部分(我同时只有一个访问组件的权限,而只有一个线程) ?

谢谢你的建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-14 15:27:34

这个问题是相当主观的,可能不是主观的,而是主观的。下面是我选择动态创建ADO对象的原因:

  • 将一切保持在一起:代码和用于访问代码的对象。使用在表单上创建的数据访问对象需要线程对表单的内部工作方式有深入的了解,这绝不是一个好主意。
  • 更安全,因为您不能从其他线程(包括主VCL线程)访问这些对象。当然,您并没有计划将这些连接用于其他任何事情,也没有计划使用多线程等,但也许有一天您会忘记那些restrictions.
  • It's的未来证明。您可能希望使用来自其他项目的相同线程。您可能需要添加第二个线程来访问同一应用程序中的其他数据。
  • I有一个个人偏好,可以根据代码动态创建数据访问对象。是的,对一个主观问题的主观回答。--
票数 8
EN

Stack Overflow用户

发布于 2011-02-20 09:36:23

运行线程中的所有内容。在线程中有一个定期计时器,用于打开DB连接、读取数据、将其"posts“回主线程,然后断开连接。线程在等待时间时需要“休眠”,例如在Windows上,甚至是由计时器发出信号。DB组件是线程的本地和私有组件,可以在线程执行开始时(在应用程序启动时)在线程内创建,在线程执行完成时(在应用程序关闭时)释放。这将始终有效,无论DB连接是否暂时可用,主线程甚至不必与"DB线程“通信。这是一种我一直在使用的架构,而且是完全可以防弹的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4993768

复制
相关文章

相似问题

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