Access 2010 - ошибка выполнения 3022

Я пытаюсь добавить записи в существующую таблицу под названием "Темы" (раздел "Для каждого SelectedTopic In SelectedTopicsCtl.ItemsSelected" в коде ниже). При выполнении кода я всегда получаю сообщение "Ошибка времени выполнения" 3022 ": изменения, запрошенные вами в таблице, не увенчались успехом, поскольку они могут создать дублирующиеся значения в индексе, первичном ключе или отношении. Поэтому при создании Autonumber в поле "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

1 ответ

Во-первых, ваши Dims не будут работать так, как вы ожидаете. Использование:

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

Во-вторых, похоже, что вы включили свой идентификатор здесь:

TopicRecord.Fields(Counter) 

или Тема - это запрос, который как-то включает его. Попробуйте указать поля специально и / или выполнить отладку следующим образом:

For Counter = 3 To SelectedTopicsCtl.ColumnCount - 1
    TopicRecord.Fields(Counter).Value = SelectedTopicsCtl.Column(Counter, SelectedTopic)
    Debug.Print Counter, TopicRecord.Fields(Counter).Name
Next Counter
Другие вопросы по тегам