在后台线程中运行Firebird查询并保存结果集

我想把带有参数的查询执行到delphi-2009的线程安全类中。

我在谷歌浏览,但我没有find我想要的。

谢谢

Solutions Collecting From Web of "在后台线程中运行Firebird查询并保存结果集"

我发现大多数数据库API只在连接级别是线程安全的。 火鸟可能会有所不同,但使用InterBase几(8+)年前,它不是线程安全的。 更新: 我已经验证了Firebird在连接级别只是线程安全的。

这意味着您通常需要避免同时使用来自多个线程的单个连接。 针对给定连接的查询的执行适用。 避免在针对相同连接运行的不同线程中进行两个查询。

但是,如果你有两个连接,你可以同时运行两个查询。

你的问题的本质似乎是如何以安全的方式传递数据到一个线程,虽然你的具体需求是数据库,但是这种方式适用于通用的方式,无论线程中包含什么。

传递数据最简单的方法是创建,你可以创建线程挂起,设置TThread后裔的各种属性。 然后恢复线程的执行。 在线程中工作的实际代码需要从Execute()方法中调用。

如果您需要在线程之间共享数据,则必须将其包含在允许进行同步的各种结构之一中,例如Critical Section,Mutex或Semaphore。

Delphi在SyncObjs.pas单元中有这些库的包装器。