我有一个新组织的Access 2016后端,我正在尝试从当前的Access 2000数据库导入记录 . 以下记录导入得很好:

Sub tblOrders_FillTable()

Dim SQL As String

SQL = "INSERT INTO tblOrders (OrderNumber, AccountNumber, DateIn, Shipping, PONumber) " & _
      "SELECT ORDERNumber, Account, DateIn, Shipping, PONumber FROM tblOrder IN " & _
      "'" & strPath & "';"
DoCmd.RunSQL SQL

End Sub

OrderNumber是新表和旧表的主键,因此它被编入索引 . 在我需要填写的另一个表中,旧表没有主键,也没有索引,但新表确实有一个作为主键的字段,因此被索引 .

我正在做的是将所有旧记录引入重复密钥表(单独保存),然后将非重复记录和非空记录带入具有主键字段的新表中 . (然后我将从重复键表中删除非重复记录)

Sub tblCustomerEQ_FillTable()

Dim SQL As String

'Fill the duplicates table since this table has no primary key
SQL = "INSERT INTO `*tblDuplicateCustomerEQKeys` (CustomerEQIDNumber, AccountNumber, SecondEQIDNumber, " & _
      "UnitDescription, MFG, Model, LastDateIn, IntervalInDays, ExpirationDate, Price, " & _
      "Department) SELECT `CustomerEQID #`, `ACCOUNT #`, `Second EQID#`, `UNIT Description`, " & _
      "MFG, MODEL, `LAST DATE IN`, `INTERVAL IN DAYS`, `EXPIRATION DATE`, PRICE, " & _
      "`DEPT NO` FROM tblCustomerEQ IN '" & strPath & "';"
DoCmd.RunSQL SQL

'Find duplicate keys & insert them into the Count table
SQL = "INSERT INTO `*tblCountCustomerEQDuplicateKeys` " & _
      "SELECT COUNT(*) AS NumberOfDuplicates, " & _
      "`*tblDuplicateCustomerEQKeys`.CustomerEQIDNumber AS DuplicateCustomerEQIDNumbers " & _
      "FROM `*tblDuplicateCustomerEQKeys` GROUP BY " & _
      "`*tblDuplicateCustomerEQKeys`.CustomerEQIDNumber " & _
      "HAVING COUNT(*) > 1;"
DoCmd.RunSQL SQL

'Insert records that are not duplicates and are not null into indexed table
SQL = "INSERT INTO tblCustomerEQ " & _
      "SELECT * FROM `*tblDuplicateCustomerEQKeys` " & _
      "WHERE `*tblDuplicateCustomerEQKeys`.CustomerEQIDNumber IS NOT NULL AND " & _
      "`*tblDuplicateCustomerEQKeys`.CustomerEQIDNumber NOT IN " & _
      "(SELECT DuplicateCustomerEQIDNumbers " & _
      "FROM `*tblCountCustomerEQDuplicateKeys`);"
DoCmd.RunSQL SQL

由于我插入新表的记录不是重复的而不是null,我认为主键字段的要求将得到满足,insert into语句可以正常工作 . 但是,当我运行SQL语句时,查询永远不会结束 .

我以为我可以删除主键索引对象,然后重新创建主键索引对象,但这会破坏我的表关系 .

我认为有人必须有一个方法从表中导入记录而不索引到带索引的表(如果这实际上是为什么我的SQL语句永远不会结束) .

谢谢你的时间!