从VBA中的Access表中删除并添加ID密钥索引

时间:2016-03-24 10:56:58

标签: sql vba access-vba

我有一个Access DB,可以通过宏(转换为VBA)每小时自动统一一个表中的几个CSV( Aux_Table1 )。在统一之前,我运行查询以清除 Aux_Table1 表,但Access被编码为 NOT 重用KEY ID,因此每次清除和统一CSV时,密钥ID都会继续计数。

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

如何在我的(VBA)功能中通过VBA将此过程转换为INCLUDE? (参见这个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:\access\fullCatalog.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

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您需要重置ID字段

上的自动增量计数器

您可以使用此SQL指令

执行此操作
CurrentDb.Execute "ALTER TABLE Aux_Tabla1 ALTER COLUMN ID COUNTER(1,1)"

答案 1 :(得分:1)

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

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

此SQL语句将重置列&#34; ID&#34;上的自动增量计数器。为1,每个记录增加1。您可以CurrentDb.ExecuteDoCmd.RunSQL执行此操作。

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