私はDelphi 10.1 BerlinのFireDacで作業しています。FireDac GUIがフリーズ
ユーザーにデータを表示するために、私はTDBEditのようなデータ認識コントロールを使用します。
TFDQueryとTDataSourceを使用してコントロールとリンクします。
これは動作しますが、exectuteに時間がかかる長いSQLクエリはGUIをフリーズします。
長時間実行されているクエリを実行しているときにguiがフリーズするのを防ぐ方法が不思議です。
私はバックグラウンドスレッドを考えていました。私はFireDacは、マルチスレッドで動作できることを読んウィキに
: http://docwiki.embarcadero.com/RADStudio/XE6/en/Multithreading_(FireDAC)
しかしエンバカデロのコミュニティフォーラムにthreadジェフOvercashは書いている:私は尋ねたりドミトリー言及を見ていない
一つですバックグラウンドスレッドクエリに対して TDataSourceまたはLiveBindingsを持つことはできません。 の結果を表示するクエリをバックグラウンドでスレッドする場合は、LBまたはDataSourceを切断し、すべてのデータを開いて取得してから、接続を再確立してください。
これらの2つは、バッファが非常に揮発性で、別のスレッド内で移動している間に、カーソルを移動したり、 バッファに照会しようとしています。
また、FireDacを使用してフォームに値を表示する人が私を助けてくれるのかと疑問に思います。
バックグラウンドスレッドの実行中にデータソース/ライブバインディングを接続しようとしましたか?私が見積もりを正しく理解すれば、これはうまくいくはずです。 – mjn
それを試してみてください。ただし、TFDQueryがアクティブでなくなったためにTDataSourceがリセットされるため、切断するとすべてのフォームフィールドが空になります。例えば、DBNavigatorを使用している場合は同じ位置にいません。 – Tommy
TClientDataSetを使用してこれを実行していた場合は、DB認識GUIコンポーネントに接続されているCDS1とします。これを行う方法は、バックグラウンドスレッドでクエリを実行したCDS2 Synchronizeを呼び出してDataプロパティをCDS1に割り当てます。これは必要なものすべてであり、aasignmentは即時になります。 FireDACでも同様のことができると思います。 – MartynA