2016-01-11 39 views
3

我想使用組件編輯器設計我的TFDQuery,即在設計時設置SQL字符串,選項等,然後在一個線程中使用查詢。如何在使用多線程時使用Delphi設計時的FireDac TFDQuery?

我的問題是線程的每個正在運行的實例都需要它自己的查詢實例 - 否則它不會是線程安全的。

我應該在線程開始運行時克隆查詢,即在線程的Execute方法中,然後設置它的連接 - 如果是這樣,怎麼辦?還是有更好的方法來做到這一點?

謝謝

回答

3

正如documentation描述:

...一個線程中打開一個查詢後,直到其處理完成, 應用程序無法使用此查詢,並在連接對象 另一個線程。同樣,在線程啓動一個事務並且在事務完成之前,應用程序不能在另一個線程中使用這個事務和連接對象。

而且也:

標準的簡化是創建和使用爲每個線程 專用連接對象與數據庫工作。

所以最簡單的解決方案是每個工作者線程有一個單獨的連接。如果您在同一個數據模塊中使用FireDAC(連接,事務和查詢)組件,那麼最簡單的解決方案可能就是爲每個工作線程簡單地創建一個單獨的整個數據模塊實例。

+0

謝謝你的回答!數據模塊約有5個查詢,在高峯時段平均每秒調用5次。我有點擔心每次創建數據模塊所需的時間。將做一些測試並在這裏報告。 – Floris

+0

歡迎。您可以考慮使用連接池來保持連接,以便可以重用它們,而不是爲每個請求創建和銷燬數據模塊。 –

+0

是的。我的想法是使用FireDac提供的連接池,但您的提議可能只是一些額外的工作,我仍然可以使用FireDac連接池。 – Floris