2016-10-19 5 views
-2

私はFireDacでDelphi 10.1を使用していますが、SQLiteデータベースを使用しています。起動時にすべてのレコードを含むクエリを読み込むために少し時間がかかるため、フォームが表示された後に、クエリを開いています。フォームが最初に表示されていることをユーザーに知らせたい私に。クエリやテーブルを開く前にSQLiteテーブルのレコード数を取得するのは可能でしょうか?

進捗バーを使用して、データがクエリに読み込まれる際に進捗状況を表示したいとします。クエリのGetRecordsイベントとこれまでにフェッチされたレコードの数を示すQuery.RecordCountを使用して進捗状況を取得できますが、Query.Openまたはその内部を呼び出す前にSQLiteテーブルの合計レコードを取得する方法がありますGetRecordsイベント?このようにして、レコードが読み込まれるときに進捗状況を表示することができます。

+0

別のクエリで最初にそれを取得してみませんか? :テーブルからCOUNT(*)を選択 –

+0

ありがとうございます。私は10年間SQLを使いこなしていません。コメントは完璧に機能し、速いです。実際には、StringGridにバインドされていないときは元のクエリと同じくらい速いです。 7000レコードがStringGridをロードするのに約5秒かかり、私はSSDドライブを持っています。私は、クエリのコントロールを無効にしようとしましたが、すぐに私はそれらを有効にすると、文字列グリッドの読み込みは5秒の読み込み時間を開始しました。グリッドをアンバインドし、クエリがロードされた後でもバインドされますが、グリッドをロードする時間はまだかかりました。間違いなく、表示する必要があるものだけをロードするDBGridではありません。 –

+0

ブックを開かずにブックのページに表示されている単語の数がわからないのと同様に、クエリ結果またはテーブルに何行含まれているかを検出することはできません。 Marcが述べたように、実際のクエリが行をロードするのに使うWHERE句と同じ 'COUNT(*)'を使用してください。 –

答えて

0

SQLのヒントありがとうございます。SELECT COUNT(*)FROM TABLE Marc。

実際には、クエリの開始が遅かったのはクエリではなく、StringGridを作成することでした。 StringGridは私のためだけにあり、ユーザには表示されません。クエリとの接続を切断すると、速度の差がすべて生じました。

ありがとうございました。

+0

SOのアイデアは、OPだけでなく将来の読者に役立つものです。あなたの答えは、例えば、あなたがどのようにStringGridに値を設定していたか、LiveBindingsによって、または何があっても、それほど助けにならないでしょう。また、ライブバインディングを使用している場合、**あなたの質問はそうだと言います.2つのSqliteとprogress-barタグは無関係です。なぜならライブバインディングはTDBGridよりもStringGridを使用するとはるかに遅いことがわかっているからです。その他...私は、この答えがupvoted、驚いた。 – MartynA

+0

あなたは[this](https://stackoverflow.com/a/45098356/8041231)を探しているかもしれません。 – Victoria

関連する問題