2016-12-16 5 views
-1

Wenn ich die folgende VBA ausführe, tut sie, was ich brauche.Tabelle löschen ohne Index zu löschen

Ich repopulate dann die Tabelle, aber wenn ich eine Abfrage gegen diese Daten ausführen, ist es Hund langsam. Grund ist, dass der Index weg ist.

Kann ich einen Index über VBA neu erstellen oder gibt es eine andere Möglichkeit, die Tabelle zu löschen, ohne den Index zu entfernen?

+0

Der Index ist weg? Ich weiß nicht, über DoCmd.RunSQL, aber laut Aussagen, sollten Sie es um jeden Preis vermeiden. So haben Sie versucht, CurrentDb.Execute "Ihre Abfrage" statt? Lass mich wissen wie es sich entwickelt! –

+5

Wenn Sie die Tabelle "neu auffüllen" verwenden Sie eine make-table Abfrage ('SELECT ... INTO tmp_tbl_order_short FROM ...')? Wenn das der Fall ist, dann * repopulierst du * die Tabelle nicht, du * generierst * die Tabelle neu. In diesem Fall ist es nicht die "DELETE" -Abfrage, die den Index zum Verschwinden bringt, sondern "SELECT ... INTO". –

+1

@GordThompson: "Erstelle". Na sicher. Guter Fang. – Gustav

Antwort

2

Was meinst du mit 'Index ist weg' ?? Wenn das Feld indiziert wurde, wird es beim Hinzufügen neuer Daten erneut indiziert. Sie sind nicht Tabelle löschen und neu zu erstellen, die Sie tun können, wenn nötig, mit folgenden SQL-Anweisungen, die Sie ausführen können:

DROP TABLE tempTable; 

CREATE TABLE tempTable(all fields) 

und Folgen von Indexerstellung:

CREATE INDEX myTempIndex 
ON tempTable (FieldToIndex) 

Meiner Meinung nach, etwas anderes macht Ihre Abfrage langsamer, vielleicht falsch Feld indiziert usw.

1

Ok ... mein schlechtes. Während der Entwicklung dieses Prozesses war die Abfrage, die die Tabelle neu bevölkerte, eine "make table" -Abfrage, die in Ordnung war, bis ich feststellte, dass ein Index erforderlich war. Die ursprüngliche VBA-Sequenz löschte die Tabelle, und dann dachte ich, die neuen Daten angehängt zu haben.

So löschte 'DoCmd.RunSQL "DELETE * FROM tmp_tbl_order_short"' den Index nicht, die Abfrage der Tabelle war.

Verwandte Themen