2016-12-16 87 views
-1

当我运行下面的VBA它做我需要的。清除表而不删除索引

DoCmd.RunSQL "DELETE * FROM tmp_tbl_order_short" 

然后我重新填充表,但是当我对这些数据运行一个查询它的狗缓慢。原因是索引消失了。

我可以通过VBA重新创建索引还是有另一种清除表的方式而不删除索引?

+0

索引不见了?我不知道DoCmd.RunSQL,但quidlines说,你应该避免它不惜一切代价。那么你是否尝试过使用CurrentDb.Execute“你的查询”呢?让我知道结果如何! –

+5

当您“重新填充”表格时,是否使用了生成表查询('SELECT ... INTO tmp_tbl_order_short FROM ...')?如果是这样,那么你就不会重新填充表格,而是重新创建表格。在这种情况下,它不是导致索引消失的'DELETE'查询,它是'SELECT ... INTO'。 –

+1

@GordThompson:“重新创造”。当然。接得好。 – Gustav

回答

2

你是什么意思'指数已经消失'?如果字段被索引,那么当您添加新数据时,它将重新索引。你是不是删除表并重新创建它,你可以做,如果需要的话,用下面你可以执行SQL语句:

DROP TABLE tempTable; 

CREATE TABLE tempTable(all fields) 

,并通过创建指标追踪:

CREATE INDEX myTempIndex 
ON tempTable (FieldToIndex) 

在我看来,别的什么让你的查询变慢,可能是错误的字段索引等。

1

好的...我的坏。在这个过程的开发过程中,重新填充表的查询是一个'make table'查询,这个查询很好,直到我意识到索引是必需的。原始的VBA序列清除了表格,然后我仔细地追加了新的数据。

因此'DoCmd.RunSQL'DELETE * FROM tmp_tbl_order_short“'没有删除索引,make表查询是。