我在MS Access中有一个表和一个表单。数据通过表格添加。我希望能够跟踪用户更改。我的表中有一个用户列,在更新表单后将添加用户名。为此,我有以下VBA代码,将在表单更新后触发,但它不起作用,我不知道错误在哪里。帮助将不胜感激。感谢
Private Sub Form_AfterUpdate()
Dim UserLogin As String
Dim MyId As Integer
Dim strSQL As String
Dim rs As Recordset
UserLogin = Environ("Username")
MyId = Me!ID.Value
Set strSQL = "Update [MyTable] SET [MyTable]!User = '" & UserLogin & "' WHERE [MyTable]!ID = '" & MyId & "';"
'Set rs = dbs.OpenRecordset(strSQL)
DoCmd.RunSQL strSQL
答案 0 :(得分:2)
您不仅可以跟踪特定形式的更改,还可以注册数据中所做的任何更改,即使是直接在表格上完成也是如此。只需为您的表创建Before Change
数据宏("创建数据宏"在表设计模式下的菜单。
在数据宏设计器中,使用以下参数添加操作SetField
:Name = User
("用户"是用于存储用户名的字段名称)和Value = GetUserName()
。
在任何标准模块中创建如下函数:
Public Function GetUserName() As String
GetUserName = Environ("Username")
End Function
在此之后,您的表中的任何更改都将按用户名更新已更改的记录,用户是谁做了此更改。
请注意,如果您要在后端编辑数据,则在分割数据库的情况下,此功能应在前端数据库和后端数据库中可用。
从您的代码开始,检查ID字段的数据类型。如果是号码,请删除单引号。也替换"!" by"。"在SQL查询文本中。
答案 1 :(得分:0)
只需插入一个带有controlsource的文本框作为“用户”
然后使用
而不是更新后<div class="container">
<div class="row">
<div class="col-md-3 text">
Lorem lorem lorem
<div class="pull-right">Ipsum lorem ipsum</div>
</div>
<div class="col-md-5">
<div class="form-inline">
<div class="form-group">
<input type="checkbox" value="" checked>
<label>Lorem</label>
<input type="checkbox" value="">
<label>Ipsum</label>
</div>
<div class="form-group">
<select class="form-control choice-select">
<option value="one">One</option>
<option value="two">Two</option>
<option value="three">Three</option>
<option value="four">Four</option>
<option value="five">Five</option>
</select>
</div>
<div class="form-group">
<input class="form-control" type="text" placeholder="Placeholder text">
</div>
</div>
</div>
<div class="col-md-4">
<div class="button-group">
<button class="btn btn-default">Lorem ipsum lorem</button>
<button class="btn btn-default">Lorem lorem lorem</button>
</div>
</div>
</div>
</div>
</div>
无需单独的SQL操作