Было бы сложно сделать это с одним элементом управления, но с двумя элементами управления, выпадающим списком для выбора значения для добавления и текстовым полем, отображающим поле memo, вы можете получить событие AfterUpdate поля со списком, добавив запятую и выбранное значение для существующих данных. Примерно так:
Private Sub cmbChooseKeyword_AfterUpdate()
If Not IsNull(me!cmbChooseKeyword) Then
Me!txtKeywordMemo = (Me!txtKeywordMemo + ", ") & Me!cmbChooseKeyword
End If
End Sub
Вы также хотели бы, чтобы источник строк вашего поля со списком не отображал список уже введенных элементов, так что это один из способов работы с относительно коротким списком ключевых слов:
SELECT tblKeywords.*
FROM tblKeywords
WHERE InStr(Forms!MyForm!txtKeywordMemo, tblKeywords.Keyword) = 0;
Тогда вы добавите:
Me.Dirty = False
Me!cmbChooseKeyword.Requery
... в конце кода AfterUpdate выше (внутри End If):
Private Sub cmbChooseKeyword_AfterUpdate()
If Not IsNull(me!cmbChooseKeyword) Then
Me!txtKeywordMemo = (Me!txtKeywordMemo + ", ") & Me!cmbChooseKeyword
Me.Dirty = False
Me!cmbChooseKeyword.Requery
End If
End Sub
... и вы захотите добавить запрос к событию OnCurrent вашей формы, а также (чтобы при получении записи в поле со списком уже отсутствовали все ключевые слова, которые уже есть в списке).
Теперь, несмотря на все сказанное, я бы полностью рекомендовал не делать этого. Это денормализованный способ хранения данных, и это приводит к проблемам:
что если вы хотите удалить одно ключевое слово?
что если вы хотите, чтобы ключевые слова сортировались в алфавитном порядке?
что, если у вас есть сотни тысяч записей, и вы хотите искать это поле с помощью LIKE "* Keyword *" - будет слишком медленно (без индексов, и не будет использоваться хорошо, даже если есть) были)?
Вы действительно должны использовать правильную структуру «многие ко многим» с дополнительной таблицей между таблицей, в которой вы в настоящий момент храните памятку по ключевым словам, и таблицей списка ключевых слов. Это «объединяет» два, а затем даст вам список.
Затем можно использовать подчиненную форму с раскрывающимся списком для заполнения каждой строки таблицы объединения.
Если вам нравится представлять ключевые слова в отчетах в виде списка, разделенного запятыми (поскольку вы в настоящий момент их храните), вы можете написать простую функцию, которая будет выполнять конкатенацию для вас на уровне представления ваших отчетов (функции конкатенации для эта цель является частым вопросом доступа здесь, на Stackoverflow).