Как исправить проблему группы параметров доступа MS? - PullRequest
0 голосов
/ 20 января 2020

Я создал много групп опций в MS Access 2013, и я пытаюсь заполнить свою таблицу в соответствии с тем, что выбрано в группе опций. Итак, если пользователь выбирает вариант 1, я хочу, чтобы «текст» не его значение, например: «1», хранится в моей таблице. Я попробовал следующий код в событии AfterUpdate (), и он отлично работает:

Private Sub Frame49_AfterUpdate()
Dim D As Integer

 Select Case Me![Frame49]
  Case 1
      Me![Name] = "text"
    D = 1
  Case 2
    Me![Name] = "text1"
  D = 2
  Case 3
    Me![Name] = "text2"
  D = 3
  Case 4
    Me![Name] = "text3"
  D = 4
  Case 5
    Me![Name] = "text4"
  D = 5
End Select
DoCmd.RunCommand acCmdSaveRecord

Rem D = Frame49.Value
End Sub

, но когда конечный пользователь отвечает на первый вопрос и пытается ответить на следующий вопрос, все параметры предыдущего вопроса выбираются. Как я могу это исправить? Вот файл, чтобы понять, что я имею в виду: https://drive.google.com/open?id=1WjrAhXCnk961mxBuxS3RYqOUpPA_GsyL

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 21 января 2020

, хотя группа параметров принимает только цифры c значений, вы можете достичь желаемого, жестко закодировав значения с помощью операторов if, например

        If Frame5 = 1 Then orukolook = "okay"
        If Frame5 = 2 Then orukolook = "right"
        If Frame5 = 3 Then orukolook = "fine"

orukolook - это элемент управления текстового поля, для которого вы хотите получить текст для вставки, поэтому, если выбран первый параметр группы параметров, текст «okay» будет вставлен в элемент управления textbox, если второй параметр, то будет вставлен текст «right».

Значения жестко запрограммированы в заполнителе, выглядят как oruko, например, хорошо, правильно, отлично - это метки, связанные с каждым значением в группе параметров.

0 голосов
/ 08 февраля 2020

Frame49 привязан к полю базы данных.

Когда пользователь нажимает флажок, значение поля (вместе со значением Frame49) устанавливается в целое число.

Затем вы изменяете значение поля базы данных на строку.

Это приводит к тому, что значение Frame49 устанавливается в эту строку.

Поскольку это недопустимое значение для группы параметров, все связанные флажки отображаются в виде solid черного квадрата, представляющего неопределенное состояние. Это не то же самое, что галочка, поэтому ваше наблюдение «все опции предыдущего вопроса выбраны» неверно.

Самый простой способ сделать то, что вы хотите, это использовать ListBox с 1 колонкой вместо Вариант группы. Вы можете настроить размер каждого ListBox так, чтобы он отображал все опции в виде текстовых строк.

Когда пользователь нажимает «опцию», чтобы выбрать его, соответствующая текстовая строка будет записана в базу данных без кода VBA. .

Когда пользователь возвращается к предыдущей записи, все списки будут отображать правильные варианты выбора.

Если вы не хотите изменять внешний вид вашей формы, то вы должны сделать так: другие предложили и делают Frame49 несвязанным, т. е. устанавливают пустым его Источник управления.

Тогда, когда вы установите значение поля базы данных в текстовую строку, значение Frame49 останется целым числом.

Если вам нужна возможность go назад и редактировать более ранние записи, вы можете сделать это, но это за пределами того, что я могу ответить здесь.

0 голосов
/ 20 января 2020

Рамка OptionGroup и соответствующие кнопки / флажки должны иметь числовое значение. Поэтому фрейм OptionGroup должен быть привязан к полю числового типа. Если вы хотите, чтобы элементы управления отражали выделение в текстовом поле, тогда необходим код для установки рамки UNBOUND OptionGroup с соответствующим числовым значением. Другими словами, конвертируйте сохраненный текст обратно в числовое значение. Код, скорее всего, должен быть в форме текущего события. Что-то вроде:

Me.Frame49 = Switch([Name]="text",1, [Name]="text1",2, [Name]="text2",3, [Name]="text3",4, [Name]="text4",5)

Также можно сохранить числовое значение в числовых полях. Текстовый эквивалент представлен метками на форме. Используйте таблицы поиска для предоставления текстового эквивалента в отчетах или расчета эквивалентов с помощью выражений в запросе или текстовых полях. Выражение типа:
Choose([Name], "text", "text1", "text2", "text3", "text4")

BTY, выражение Choose () можно использовать вместо структуры Case в исходном коде.
Me![Name] = Choose(Me.Frame49, "text", "text1", "text2", "text3", "text4")

Также рекомендуем использовать кнопки радио (опции) вместо флажков.

Другими альтернативами являются комбинированные списки и списки вместо групп параметров.

Советуем не использовать зарезервированные слова в качестве имен для чего-либо. Name - зарезервированное слово. Кроме того, избегайте пробелов и знаков препинания / специальных символов в соглашении об именах.

...