用vba更改字段的值

时间:2017-01-23 10:30:49

标签: vba ms-access access-vba

我想通过点击相关表单中的按钮将特定表格中的日期更改为今天的日期。因此,所有按钮都会更改数据库中某个字段的日期。使用VBA有一种简单的方法吗?

我对MS Access和VBA编码都很陌生,所以这可能是一个简单的问题但它有点让我发疯。

非常感谢您提前

*更新

我在我的VBA代码中写了这个:

CurrentDb.Execute“UPDATE Machines SET LastMaintenance = Date()WHERE MachineID = MachineID.Value” 使用“Machines”作为我的表,“LastMaintenance”包含必须更改为今天日期的日期的列,“MachineID”记录的名称和“MachineID.Value”绑定到同一记录的文本框的名称。

这段代码有什么问题吗?因为当我点击按钮时,我得到了这个恼人的错误:“没有足够的参数.1预期。”

4 个答案:

答案 0 :(得分:2)

最直接的方法是运行UPDATE查询。

CurrentDB.Execute "UPDATE someTable SET someDate = Date() WHERE stuff = 47"

答案 1 :(得分:2)

执行更新查询时,您需要了解每个字段的数据类型,因为您必须在代码中以不同方式呈现它。此外,在插入变量时,您需要分解字符串文本。在您当前的状态下,它正在寻找具有' MachineID.value'的MachineID字段。作为其内容。试试这个:

CurrentDb.Execute "UPDATE Machines SET LastMaintenance = Date() WHERE MachineID = " & MachineID.Value

答案 2 :(得分:0)

如果

  

相关表格中的按钮

表示绑定到该表的表单,显示您要更新的记录,使用按钮的 OnClick 事件:

Private Sub NameOfYourButton_Click()

    Me![NameOfYourDateField].Value = Date
    ' Optionally, save the record at once:
    Me.Dirty = False

End Sub

答案 3 :(得分:0)

UPDATE 命令很危险,因为您正在假设输入正常的情况下对数据库进行更改。我建议使用参数化的 VBA 代码来避免 SQL 注入并在 VBA 中为格式错误的输入抛出错误。

此示例使用静态字符串加载您的记录集,然后它清楚地说明未经验证的输入仅用于查找命令。然后它仅在找到匹配记录时才起作用。这是一个更安全的操作,虽然更冗长。它也可以在 VBA 中调试,其中 SQL UPDATE 命令是一种黑匣子。

With CurrentDb.OpenRecordset("Machines", dbOpenDynaset)
    .FindFirst "[MachineID]=" & MachineID.Value
    If .NoMatch Then
        Debug.Print "ID not found: " & MachineID.Value
    Else
        .Edit
        .Fields.Item("LastMaintenance").Value = Date()
        .Update
    End If

    .Close
End With