Невозможно передать значение из одной формы в другую - 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.
Простое решение Не дает честным людям переписывать работу друг друга. Я часто использую этот подход.