向tblCompany添加记录失败并显示VBA(错误代码3022),我也无法手动将新记录添加到表中。
当我尝试使用vba(使用rs,.addnew,...,。update)向表中添加记录时,.update给出错误3022:
"您向表格请求的更改未成功,因为它们会在索引,主键或关系中创建重复值"
tblCompany包含PK:CompanyID(Autonumber)
我试图打开表并手动添加记录。我收到相同的错误消息,没有错误代码。
到目前为止我尝试了什么:
代码试过:
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中手动添加记录,如果我压缩并修复它,那么我就不能再添加记录了,并描述了错误。