Невозможно передать значение из одной формы в другую - Ms access

У меня есть несколько форм VBA, первая форма берет имя пользователя из поля со списком и сохраняет его в глобальной переменной, код ниже:

Option Compare Database
Public emplID_global

Private Sub OKLogin_Click()


 If Not IsNull(Me.Combo_emplID) Then
  emplID_global = Me.Combo_emplID.Column(1)
  DoCmd.Close
  DoCmd.OpenForm "NavFrm", acNormal
 End If
End Sub

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

Private Sub Form_Load()
 Me.AdvName = emplID_global
 Me.DataForm.Form.Recordset.MoveLast

End Sub

но он не работает, он ничего не делает. Я хочу использовать этот вид кода во всех формах.

Может кто-нибудь предложить, пожалуйста, в чем ошибка в моем коде, я довольно плохо знаком с VBA. Заранее спасибо:)

1 ответ

Добавьте в основную таблицу поле для владельца этой конкретной записи. (Я только что назвал это Owner.)

Добавьте следующий код в вашу форму:

Private Sub Form_BeforeInsert(Cancel As Integer)
Owner = Environ("username")
End Sub

Private Sub Form_Current()
Dim editable As Boolean

if nz(Owner,"")="" then
    editable=true
else
    editable = (Environ("username") = Owner)
    End If

Form.AllowDeletions = editable
Form.AllowEdits = editable

End Sub

Это довольно общее решение, которое делает свою работу. Environ("username") возвращает имя пользователя windows windows. Это не обязательно все, что безопасно. Человек может перейти в командную строку и отредактировать username переменная среды, так что они кажутся другим человеком. Это определенно не будет держать АНБ или кого-либо еще с небольшим знанием компьютера и плохими намерениями. Но это будет держать честных людей честными.

Пояснение: BeforeInsert работает, поскольку новая запись сохраняется. В этом случае он устанавливает рекорд Owner поле для имени пользователя Windows.

OnCurrent часть запускается каждый раз, когда отображается новая запись. Код проверит, чтобы увидеть, соответствует ли текущее имя пользователя Windows имени пользователя, сохраненному в записи. Owner поле и установить формы AllowEdits а также AllowDeletions флаги соответственно. Кроме того, если Owner поле null (как в случае новой записи), editable будет установлен в true, Если вы действительно хотите подчеркнуть тот факт, что пользователь не должен что-то менять, вы также можете включить / отключить отдельные текстовые поля...

TextBox1.Enabled=editable
ComboBox2.Enabled=editable
... etc.

Простое решение Не дает честным людям переписывать работу друг друга. Я часто использую этот подход.

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