2016-12-16 10 views
-1

私は次のVBAを実行するときに必要なことをします。インデックスを削除しないでテーブルを消去

DoCmd.RunSQL "DELETE * FROM tmp_tbl_order_short" 

次に、テーブルを再作成しますが、そのデータに対してクエリを実行すると、犬は遅くなります。理由は、インデックスがなくなったことです。

インデックスをVBA経由で再作成することはできますか?インデックスを削除せずにテーブルを消去する別の方法はありますか?

+0

インデックスは削除されましたか?私はDoCmd.RunSQLについて知らないが、クライドラインは言う。だからあなたはCurrentDb.Execute "Your query"を試してみましたか?それがどのようになったのか教えてください! –

+5

テーブルを再作成するときに、テーブル作成クエリ(SELECT ... INTO tmp_tbl_order_short FROM ... ')を使用していますか?もしそうなら、あなたはテーブルを再充填するのではなく、あなたは*テーブルを作り直しています。その場合は、インデックスを消す「DELETE」クエリではなく、SELECT ... INTOです。 –

+1

@GordThompson: "再作成する"。もちろん。良いキャッチ。 – Gustav

答えて

2

「インデックスがなくなった」とはどういう意味ですか?フィールドが索引付けされている場合は、新しいデータを追加すると索引が再作成されます。

DROP TABLE tempTable; 

CREATE TABLE tempTable(all fields) 

とインデックスを作成することによって従ってください:必要に応じてあなたが実行できるSQL文を次のように、あなたが行うことができます、テーブルを削除し、それを再作成していない私の意見では

CREATE INDEX myTempIndex 
ON tempTable (FieldToIndex) 

を、他の何かがあなたのクエリを遅く、おそらく間違ったフィールドインデックスなどにしています。

1

Ok ...私の悪い。このプロセスの開発中に、テーブルを再投入したクエリは「テーブル作成」クエリであり、インデックスが必要であることがわかるまでは問題ありませんでした。元のVBAシーケンスでテーブルがクリアされ、新しいデータが追加されました。

したがって、 'DoCmd.RunSQL "DELETE * FROM tmp_tbl_order_short"'はインデックスを削除していないため、テーブル作成クエリは削除されませんでした。

関連する問題