GUI に関する質問(FireDAC)

提供: RAD Studio
移動先: 案内検索

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.SilentModeTrue に設定すると、待機カーソルだけが無効になります。

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 を使ってそれらのレコードを選択し直すことができます。