GUI に関する質問(FireDAC)
FAQ(FireDAC) への移動
このトピックでは、FireDAC GUI に関係する質問と回答の一覧を扱います。
Q1: 長時間かかるクエリの実行中に、アプリケーションがビジー状態にあることを知らせるダイアログを表示するには、どうすればよいでしょうか。
A: FDQuery.ResourceOptions.CmdExecMode を amCancelDialog に設定し、TFDGUIxAsyncExecuteDialog をフォームにドロップしてから、長時間かかるクエリのテスト プログラムを準備し、それを実行します。
クエリの実行中、[お待ちください]ラベルと[キャンセル]ボタンの付いたダイアログが FireDAC により表示されます。ユーザーがボタンをクリックすると、クエリの実行がキャンセルされます。
Q2: FDGUIxLoginDialog をローカライズするには、どうすればよいでしょうか。
A: 次のようなコードを使用します。
with FDGUIxLoginDialog1.VisibleItems do begin
Clear;
Add('User_Name=<local phrase>');
Add('Password=<local phrase>');
end;
また、FireDAC.Stan.ResStrs ユニットを開き、"Dialog captions"(ダイアログ キャプション)というセクションを見つけ、その中の項目を翻訳することもできます。
Q3: TFDGUIxErrorDialog を使ってエラーを処理するには、どうすればよいでしょうか。
A: ただ TFDGUIxErrorDialog コンポーネントをフォームまたはデータ モジュールにドロップするだけです。そうすれば、未処理の例外 EFDDBEngineException に対して、FireDAC エラー ダイアログが表示されます。それを実現するため、FireDAC では TApplication.OnException イベントをフックします。
Q4: SQL 用の砂時計型待機カーソルを完全にオフにするには、どうすればよいでしょうか。
A: (a) アプリケーションの待機カーソルを完全に無効にするには、Provider = 'Console' となっている TFDGUIxWaitCursor を使用します。'Console' プロバイダには空の待機カーソル実装が含まれており、待機カーソルはもう FireDAC で表示されません。マウス カーソルがまだ変化している場合は、アプリケーションには FireDAC.ConsoleUI.Wait ユニットのみ組み込まれており、FireDAC.VCLUI.Wait および FireDAC.FMXUI.Wait は組み込まれていないことを確かめます。なお、待機カーソルを再びオンにすることはできません。
(b) 待機カーソルを無効にはするものの、後で再び有効にできるようにするには、次のようなコードを使用します。
FDWaitCursor1.ScreenCursor := gcrNone;
または
FDManager.ResourceOptions.SilentMode := True;
(c) 待機カーソルと FireDAC ダイアログを無効にはするものの、後で再び有効にできるようにするには、FDManager.SilentMode プロパティを True に設定します。これで、すべての待機カーソルと以下の FireDAC ダイアログが無効になります。
- エラー ダイアログ
- 非同期実行ダイアログ
- ログイン ダイアログ
- スクリプト進行状況ダイアログ
ResourceOptions.SilentMode を True に設定すると、待機カーソルだけが無効になります。
Q5: データセットにフィルタを適用しても、グリッドのスクロール バーに変化がありません。それはなぜでしょうか。
Q: FDDataSet に接続しているグリッドがあります。レコードを次のようにフィルタリングすると、
Grid.DataSource.Dataset.Filter := 'id_virtual_channel in (1, 2, 3)'
他は問題ありませんが、スクロール バーに変化がなく、あたかもすべての行が表示されているかのようです。たとえば、グリッド全体が 500 行で、フィルタリング後はたった 3 行だけになったにもかかわらず、スクロール バー カーソルが非常に小さいままで、ほんの少し(500 行のうちの第 1 行から第 3 行まで動かす程度)しか動かせないとしたら、かなりまずいように思われます。解決策はありますか。
A: 次のようなコードを使用します。
FDQuery1.FetchOptions.RecordCountMode := cmVisible;
Q6: データセットの表示を更新したら、それまで選択されていた DBGrid の複数の行が選択解除されてしまいます。選択されたままにするには、どうすればよいでしょうか。
A: FireDAC のブックマークは、Refresh の呼び出し後、無効になります。選択されているレコードの主キー値を Refresh の呼び出し前にいったん保存し、呼び出し後に、Locate を使ってそれらのレコードを選択し直すことができます。