How do I make connection pooling work in DBX?

放肆的年华 提交于 2019-12-02 04:54:14

问题


Well, I managed get the delegate driver to set up properly, but connection pooling is still giving me a lot of trouble.

From the descriptions given in the documentation, it appears that connection pooling should work like this:

  • Set up the DBXPool driver delegate on a single, global Connection object
  • Use this Connection object for all calls into the database
  • Each DB call will get automagically routed through the delegate driver into a connection that's unique to its thread, owned by the connection pool.

In practice, I'm finding that everything seems to still be handled by the global Connection object, leading to all sorts of strange race conditions and crashes when I try to run DB queries from multiple concurrent threads.

In case it's relevant, I don't have many DBX-specific components defined; I generally run queries by calling the Connection.Execute method.

Any idea what I'm doing wrong? Am I missing a step somewhere, or do I have a bad understanding of how the DBXPool delegate driver works?


回答1:


Delphi comes with a sample project DelegatesSample. On my machine it is located under \Documents\RAD Studio\8.0\Samples\Delphi\Database\dbExpress\Delegates.

Each connection in the pool has it's own TDBXConnection object. In sample source code each connection is created by call to TDBXConnectionFactory.GetConnectionFactory.GetConnection().

As you know of course, each query in a thread should have it's own connection object.

Felix Colibri has also great article about Delphi DBX4 programming. There he describes amongst other topics also pooling database connections using a pooling delegate driver.

At least these samples helped mine understanding how connection pooling works!



来源:https://stackoverflow.com/questions/11461492/how-do-i-make-connection-pooling-work-in-dbx

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!