【问题标题】:Access 2010 - Run-time error 3022Access 2010 - 运行时错误 3022
【发布时间】:2017-01-08 14:14:01
【问题描述】:

我正在尝试将记录添加到一个名为“Topics”的现有表中(以下代码中的“For Each SelectedTopic In SelectedTopicsCtl.ItemsSelected”部分)。 执行代码时,我总是得到“运行时错误'3022':您对表请求的更改不成功,因为它们会在索引、主键或关系中创建重复值。所以在创建时出错了字段“ID”中的自动编号(= 唯一被索引的字段 - 没有重复)。 调试时,突出显示下面代码中的“TopicRecord.Update”行。 我已经在这个论坛和其他论坛上阅读了几篇关于这个主题的帖子,但仍然无法让它发挥作用 - 我一定忽略了一些东西....

Private Sub Copy_Click()

Dim JournalEntrySourceRecord, JournalEntryDestinationRecord, TopicRecord As Recordset
Dim JournalEntryToCopyFromCtl, JournalEntryToCopyToCtl, JournalEntryDateCreatedCtl, SelectedTopicsCtl As Control
Dim Counter, intI As Integer
Dim SelectedTopic, varItm As Variant

Set JournalEntryToCopyFromCtl = Forms![Copy Journal Entry]!JournalEntryToCopyFrom
Set JournalEntryToCopyToCtl = Forms![Copy Journal Entry]!JournalEntryToCopyTo
Set JournalEntryDateCreatedCtl = Forms![Copy Journal Entry]!JournalEntryDateCreated
Set JournalEntrySourceRecord = CurrentDb.OpenRecordset("Select * from JournalEntries where ID=" & JournalEntryToCopyFromCtl.Value)
Set JournalEntryDestinationRecord = CurrentDb.OpenRecordset("Select * from JournalEntries where ID=" & JournalEntryToCopyToCtl.Value)
Set SelectedTopicsCtl = Forms![Copy Journal Entry]!TopicsToCopy
Set TopicRecord = CurrentDb.OpenRecordset("Topics", dbOpenDynaset, dbSeeChanges)


With JournalEntryDestinationRecord
    .Edit
    .Fields("InitiativeID") = JournalEntrySourceRecord.Fields("InitiativeID")
    .Fields("DateCreated") = JournalEntryDateCreatedCtl.Value
    .Fields("Comment") = JournalEntrySourceRecord.Fields("Comment")
    .Fields("Active") = "True"
    .Fields("InternalOnly") = JournalEntrySourceRecord.Fields("InternalOnly")
    .Fields("Confidential") = JournalEntrySourceRecord.Fields("Confidential")
    .Update
    .Close
End With
JournalEntrySourceRecord.Close
Set JournalEntrySourceRecord = Nothing
Set JournalEntryDestinationRecord = Nothing

For Each SelectedTopic In SelectedTopicsCtl.ItemsSelected
    TopicRecord.AddNew
    For Counter = 3 To SelectedTopicsCtl.ColumnCount - 1
        TopicRecord.Fields(Counter) = SelectedTopicsCtl.Column(Counter, SelectedTopic)
    Next Counter
    TopicRecord.Fields("JournalEntryID") = JournalEntryToCopyToCtl.Value
    TopicRecord.Fields("DateCreated") = JournalEntryDateCreatedCtl.Value
    TopicRecord.Update
Next SelectedTopic
TopicRecord.Close
Set TopicRecord = Nothing
End Sub

【问题讨论】:

    标签: ms-access-2013


    【解决方案1】:

    首先,您的 Dims 无法按预期工作。使用:

    Dim JournalEntrySourceRecord As Recordset
    Dim JournalEntryDestinationRecord As Recordset
    Dim TopicRecord As Recordset
    

    其次,您的 ID 似乎包含在此处:

    TopicRecord.Fields(Counter) 
    

    or Topic 是以某种方式包含它的查询。尝试专门指定字段和/或像这样调试:

    For Counter = 3 To SelectedTopicsCtl.ColumnCount - 1
        TopicRecord.Fields(Counter).Value = SelectedTopicsCtl.Column(Counter, SelectedTopic)
        Debug.Print Counter, TopicRecord.Fields(Counter).Name
    Next Counter
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多