Microsoft Access: сделать колонку доступной только для чтения после создания

Я немного новичок в Microsoft Access (впервые использую его), и я хотел бы попробовать, учитывая, что это похоже на гибрид Microsoft Excel и SQL Server, и я хорошо знаком с последним. Что я хочу сделать, это иметь поле (например, Category) только для чтения после вставки новой строки. это Category Поле является справочником поиска, и макрос данных при создании создаст запись в соответствующей дочерней таблице с этой конкретной категорией. И я не хочу, чтобы это изменилось после создания, потому что это приведет к большим проблемам.

Есть ли способ сделать это в форме? Любой способ ограничения пользователя? Или есть обходной путь для этого? Дайте мне знать, я рассмотрю все варианты, большое спасибо!

2 ответа

Решение

Используйте текущее событие формы. Это событие срабатывает каждый раз, когда запись становится активной записью. В то время, если текущая запись является "новой", включите текстовое поле. Но для существующих записей отключите текстовое поле, чтобы пользователь не мог изменить свое сохраненное значение.

Так что, если текстовое поле называется txtFoo, ваш Form_Current процедура может быть что-то вроде этого...

Private Sub Form_Current()
    If Me.NewRecord = True Then
        ' allow edit
        Me.txtFoo.Enabled = True
    Else
        ' prevent edit
        Me.txtFoo.Enabled = False
    End If
End Sub

Или то же самое более кратко...

Private Sub Form_Current()
    Me.txtFoo.Enabled = Me.NewRecord
End Sub

В добавок к Enabled свойство, также рассмотрим Locked имущество. Либо один может сделать то, что вам нужно. Или вы можете использовать оба. Проверьте различные комбинации, чтобы увидеть, какие вы предпочитаете.

Что будет лучшим / самым простым способом ограничения доступа пользователя, будет зависеть от того, к каким аспектам приложения вы предоставляете ему доступ в первую очередь.

Из вашей ситуации и описания кажется, что ваши макросы фактически выполняют обновления / манипуляции с таблицами данных, и ваш пользователь обращается к этим данным через форму? Для большинства приложений это идеальный метод, потому что вы можете иметь отображение всей таблицы в форме, но в параметрах дизайна формы вы можете настроить представление и доступ, которые имеет пользователь.

Если вы используете эту технику, когда ваши пользователи получают доступ к данным через форму, вы очень легко можете ограничить возможность пользователя манипулировать данными таблиц без необходимости вмешательства с использованием любого VBA. Если у вас ограниченный опыт работы с Access, я думаю, вам будет проще изменить этот доступ с помощью параметров формы, которые вы можете изменить в меню свойств. Это также избавит вас от необходимости изменять свою форму, чтобы иметь свойство "имеет модуль".

Чтобы сделать поле формы доступным только для чтения, вы просто

  1. Откройте вашу форму
  2. Переключитесь на представление "Макет" или "Дизайн" (вы можете изменить свойства в любом из них)
  3. Откройте лист свойств (с помощью кнопки "Лист свойств" на ленте "Дизайн")
  4. Выберите поле, которое вы хотите сделать только для чтения
  5. На вкладке "Данные" в окне свойств имеется свойство "Заблокировано". Переключите это свойство на "Да"

Это сделает так, что пользователь не сможет изменить поле! (Из этой формы)

Вариант второй:

Если вы хотите, чтобы ваши пользователи просто просматривали таблицу в обычном представлении таблицы данных (не в форме), вы можете открыть их с помощью макроса, который использует "OpenTable" (список объектов базы данных) и установить режим данных "Только чтение". ВАЖНО: Это сделало бы так, чтобы пользователь не мог редактировать никакие поля!! Если вам нужно, чтобы они могли редактировать другие поля, вы не можете использовать эту опцию.

Решение HansUp: ВАЖНО отметить (так как вы новый пользователь) Чтобы использовать этот VBA, вам необходимо внести следующие изменения в лист свойств этой формы:

  1. Выберите "Форма" в качестве объекта
  2. Измените свойство "HasModule" (на вкладке "Другие" в листе свойств) на "Да"

Кроме того, я не смог найти простой способ добраться до формы собственности. Альтернативой может быть использование "На фокусе" (на вкладке "События"), чтобы установить для свойства этого текстового поля значение "Отключено" с помощью предложенной им процедуры VBA.

Другие вопросы по тегам