Access我无法手动将记录添加到表中:

时间:2017-09-21 11:24:03

标签: ms-access indexing access-vba primary-key

向tblCompany添加记录失败并显示VBA(错误代码3022),我也无法手动将新记录添加到表中。

当我尝试使用vba(使用rs,.addnew,...,。update)向表中添加记录时,.update给出错误3022:

  

"您向表格请求的更改未成功,因为它们会在索引,主键或关系中创建重复值"

tblCompany包含PK:CompanyID(Autonumber)

我试图打开表并手动添加记录。我收到相同的错误消息,没有错误代码。

到目前为止我尝试了什么:

  • 我创建了一个只有一个表的新数据库,我可以正常添加记录(我无法重现此错误)
  • 我的数据库已经过压缩和修复,仍有问题
  • 我几天前打开一个备份,没有这样的错误。从那以后,我还没有编辑过表格之间的关系。
  • 我尝试从备份中导入tblCompanies(删除关系并从当前数据库中删除该表,并导入同名的同一个表),问题仍然存在。
  • 我尝试了support.microsoft.com的修复,我可以申请,但问题仍然存在:

代码试过:

iMaxID = DMax("<AutonumberFieldName>", "<TableName>") + 1
sqlFixID = "ALTER TABLE <TableName> ALTER COLUMN <AutonumberFieldName> COUNTER(" & <iMaxID> & ",1)"
enter code here

注意:我注意到在我的工作备份中,PK CompanyID未编入索引。在当前版本中,它现在被索引:是(没有重复),我不能再选择索引:否。

我该怎么办?

这是我使用的确切代码。上下文:我从SAP数据库更新我的数据库,然后显示进度条。我更新表条,公司,采购订单。此提取来自更新tblCompany的子例程。如果找到新公司(SupplierSapID),我在tblCompany中创建一个新记录。注意:tblCompany PK是CompanyID:autonumber。我没有在.addnew和.update之间设置它的值。

    Set db = CurrentDb
    sql = "SELECT DISTINCT SupplierSapID FROM tbl6SapImport ;"
    Set rsSupplierSList = db.OpenRecordset(sql, dbOpenSnapshot, dbReadOnly)
    Set rsSupplier = db.OpenRecordset("tbl1Companies", dbOpenDynaset)

    If Not (rsSupplierSList.EOF And rsSupplierSList.BOF) Then
    rsSupplierSList.MoveFirst
    Do Until rsSupplierSList.EOF = True 'we loop through the shortlist
        CurrentItem = CurrentItem + 1
        OverallItem = OverallItem + 1
        Call Form_frmProgressBarDouble.UpdateProgressBarDouble("Updating Database", CurrentItem, TotalNumberOfRecordsCurrent, "Task 3/5: Updating Company table", OverallItem, TotalNumberOfRecordsOverall)
        rsSupplier.FindFirst "CompanySapID = " & rsSupplierSList("SupplierSapID")
        If rsSupplier.NoMatch = True Then 'we need to add the supplier
            With rsSupplier
                sql = "SELECT tbl6SapImport.SupplierName, tbl6SapImport.SupplierSapID FROM tbl6SapImport WHERE tbl6SapImport.SupplierSapID = '" & rsSupplierSList("SupplierSapID") & "' ; "
                Set rsTmp = db.OpenRecordset(sql, dbOpenDynaset)
                .AddNew
                !CompanySapID = rsTmp("SupplierSapID")
                !CompanyName = rsTmp("SupplierName")
                addedSuppliers = addedSuppliers & rsTmp("SupplierSapID") & ";"
                .Update
            End With
        End If
        rsSupplierSList.MoveNext
    Loop
    End If

注意:当我打开备份时,我仍然可以在tblCompanies中手动添加记录,如果我压缩并修复它,那么我就不能再添加记录了,并描述了错误。

0 个答案:

没有答案