无法传递值从一种形式到另 - MS访问
我有一个多VBA形式,第一种形式从组合框需要用户名和一个全局变量保存它,代码如下:无法传递值从一种形式到另 - MS访问
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
现在在我的其他形式我有,我想自动填充的valueOf变量,在形式,我会用以前的格式保存的负荷组合框,下面是代码:
Private Sub Form_Load()
Me.AdvName = emplID_global
Me.DataForm.Form.Recordset.MoveLast
End Sub
但不工作,它没有做任何事情。我想在所有表单中使用这种代码。
有人可以建议我的代码中有什么错误,我对VBA相当陌生。在此先感谢:)
为该特定记录的所有者添加一个字段到您的基础表。 (我只是把它叫做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用户名。这不一定全是,即安全。一个人可以去命令提示符并编辑username
环境变量,以便它们看起来是另一个人。这肯定是而不是排除NSA或任何有一点计算机知识和坏意图的人。但它将保持诚实的人诚实。
说明: BeforeInsert
在保存新记录时运行。在这种情况下,它将记录的Owner
字段设置为用户的Windows用户名。
每次显示新记录时,OnCurrent
部分都会运行。代码将检查当前的Windows用户名是否与存储在记录的Owner
字段中的用户名匹配,并相应地设置表格AllowEdits
和AllowDeletions
标志。另外,如果Owner
字段是null
(如在新记录的情况下),editable
将被设置为true
。如果你想真正强调的事实,即用户不应该改变的东西,你也可以启用/禁用单个文本框...
TextBox1.Enabled=editable
ComboBox2.Enabled=editable
... etc.
简单的解决方案。让诚实的人不要覆盖彼此的工作。我使用这种方法很多。
不错。如果您希望在不使用API调用的情况下获得更好的安全性,请使用'CreateObject(“WScript.Network”)。UserName'而不是'Environ(“username”)''。 – Andre
thanx @xpofer,它是一个非常好的方法,我会试试这个并且回复你。你真是太棒了, –
hey @xpofer我不认为我可以阻止用户编辑对方的数据,因为我的用户在表单和数据输入模式下限制了编辑,它将表单保存为提交按钮单击,然后重新查询。我没有允许用户在表单中查看数据,但是我有一个子表单数据表,用户可以通过它查看或编辑表格中的数据(因为我禁用了它们的所有acces功能) 所以问题是如何让只有拥有该特定条目的用户才能编辑或删除子表单中的条目。 –
如果表单上的一条记录是可编辑的,那么它们都是。如果你想控制对单个记录的访问,可能需要像SQLServer这样的东西。保护Access数据库是一个常见的主题。 – June7