从VBA中的Access表中删除和添加ID键索引



我有一个Access DB,可以通过宏(转换为VBA)每小时在一个表中自动统一多个CSV(Aux_Table1)。在统一之前,我运行一个查询来清理Aux_Table1表,但Access被编码为NOT重用密钥ID,所以每次我清理和统一CSV时,密钥ID都会不断计数。

我知道的唯一一种"重置"ID KEY计数的方法是在表的设计模式下手动删除和创建这个主键,但我想自动运行它(这是一个巨大的批处理过程的一部分)。

如何通过VBA使此过程包含在我的(VBA)函数中?(请参阅此4Mb GIF演示)。

我的功能示例:

Function MacroUnify()
    DoCmd.SetWarnings False
    DoCmd.OpenQuery "00_Borrar_Aux_Tabla1", acViewNormal, acEdit
    >>> Here I need to _REMOVE_ PrimaryKey from Aux_Tabla1 <<<
    >>> Here I need to _CREATE_ PrimaryKey from Aux_Tabla1 <<<
    DoCmd.OpenQuery "10_Crea_Tabla definitva", acViewNormal, acEdit
    DoCmd.OutputTo acOutputTable, "zzz_resultado_Combinado", "Excel97-Excel2003Workbook(*.xls)", "D:accessfullCatalog.xls", False, "", , acExportQualityPrint
End Function

我试过:

 CurrentDb.Execute "ALTER TABLE Aux_Tabla1 DROP CONSTRAINT PrimaryIndex"
 DoCmd.RunSQL "CREATE INDEX PrimaryIndex ON Aux_Tabla1(ID) WITH PRIMARY"

该函数运行时没有问题,但键索引仍在计数,没有重置。

PS:索引名称为PrimaryIndex,字段名称为
ID

如果我理解正确,您需要重置ID字段上的自动递增计数器

你可以用这个SQL指令

CurrentDb.Execute "ALTER TABLE Aux_Tabla1 ALTER COLUMN ID COUNTER(1,1)"

自动递增属性属于表中的列,而不属于索引。因此,删除并重新创建索引没有任何效果。您需要先删除索引,然后删除列,然后重新创建两者。-但你不必这么做。有一个更简单的选择:

ALTER TABLE Aux_Tabla1 ALTER COLUMN ID COUNTER(1,1)

此SQL语句将把列"ID"上的自动递增计数器重置为1,并为每条记录增加1。您可以通过CurrentDb.ExecuteDoCmd.RunSQL执行此操作。

请注意,只有当表当时未打开时,才能更改表的结构。

最新更新