私はFireDacでDelphi 10.1を使用していますが、SQLiteデータベースを使用しています。起動時にすべてのレコードを含むクエリを読み込むために少し時間がかかるため、フォームが表示された後に、クエリを開いています。フォームが最初に表示されていることをユーザーに知らせたい私に。クエリやテーブルを開く前にSQLiteテーブルのレコード数を取得するのは可能でしょうか?
進捗バーを使用して、データがクエリに読み込まれる際に進捗状況を表示したいとします。クエリのGetRecordsイベントとこれまでにフェッチされたレコードの数を示すQuery.RecordCountを使用して進捗状況を取得できますが、Query.Openまたはその内部を呼び出す前にSQLiteテーブルの合計レコードを取得する方法がありますGetRecordsイベント?このようにして、レコードが読み込まれるときに進捗状況を表示することができます。
別のクエリで最初にそれを取得してみませんか? :テーブルからCOUNT(*)を選択 –
ありがとうございます。私は10年間SQLを使いこなしていません。コメントは完璧に機能し、速いです。実際には、StringGridにバインドされていないときは元のクエリと同じくらい速いです。 7000レコードがStringGridをロードするのに約5秒かかり、私はSSDドライブを持っています。私は、クエリのコントロールを無効にしようとしましたが、すぐに私はそれらを有効にすると、文字列グリッドの読み込みは5秒の読み込み時間を開始しました。グリッドをアンバインドし、クエリがロードされた後でもバインドされますが、グリッドをロードする時間はまだかかりました。間違いなく、表示する必要があるものだけをロードするDBGridではありません。 –
ブックを開かずにブックのページに表示されている単語の数がわからないのと同様に、クエリ結果またはテーブルに何行含まれているかを検出することはできません。 Marcが述べたように、実際のクエリが行をロードするのに使うWHERE句と同じ 'COUNT(*)'を使用してください。 –