2012-07-12 44 views
2

那麼,I managed get the delegate driver to set up properly,但連接池仍然給我很多麻煩。如何使連接池在DBX中工作?

從文檔中給出的說明,看來連接池應該像這樣工作:

  • 搭建DBXPool司機代表一個單一的全球Connection對象
  • 使用這一切的Connection對象調用數據庫
  • 每個數據庫調用將通過委託驅動程序自動路由到連接池所擁有的其線程唯一的連接。

實際上,我發現一切似乎仍然由全局Connection對象處理,導致各種奇怪的競爭條件和崩潰,當我嘗試從多個併發線程運行DB查詢時。

如果相關,我沒有定義許多DBX特定的組件;我通常通過調用Connection.Execute方法來運行查詢。

任何想法我做錯了什麼?我是否錯過了某個步驟,或者對DBXPool委派驅動程序的工作方式有所瞭解?

回答

2

Delphi附帶了一個示例項目DelegatesSample。在我的機器上,它位於\ Documents \ RAD Studio \ 8.0 \ Samples \ Delphi \ Database \ dbExpress \ Delegates下。

池中的每個連接都有它的自己的 TDBXConnection對象。在示例源代碼中,每個連接都通過調用TDBXConnectionFactory.GetConnectionFactory.GetConnection()創建。如你所知,當然,線程中的每個查詢都應該有它自己的連接對象。

Felix Colibri也很棒article關於Delphi DBX4編程。在那裏他介紹了使用池化委託驅動程序彙集數據庫連接的其他主題。

至少這些樣本幫助我瞭解連接池如何工作!