【问题标题】:change a field's value with vba使用 vba 更改字段的值
【发布时间】:2017-01-23 10:30:48
【问题描述】:

我想通过单击相关表单中的按钮将特定表格中的日期更改为今天的日期。所以按钮所做的就是更改我数据库中某个字段的日期。有没有一种简单的方法可以用 VBA 做到这一点?

*更新

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

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

Machines”是我的表,“LastMaintenance”是包含必须更改为今天日期的日期的列,“MachineID”是记录的名称,“MachineID.Value”是名称绑定到同一条记录的文本框。

当我点击按钮时,我得到这个错误:

“参数不足。预计 1 个。”

【问题讨论】:

  • 关于您的编辑,您希望将 VBA 代码从 SQL 字符串中取出,即CurrentDb.Execute "UPDATE Machines SET LastMaintenance = '" & Date() & "' WHERE MachineID = " & MachineID.Value

标签: ms-access vba


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      如果

      相关表单中的按钮

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

      Private Sub NameOfYourButton_Click()
      
          Me![NameOfYourDateField].Value = Date
          ' Optionally, save the record at once:
          Me.Dirty = False
      
      End Sub
      

      【讨论】:

        【解决方案4】:

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

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

        With CurrentDb.OpenRecordset("Machines", dbOpenDynaset)
            .FindFirst "[MachineID]=" & CLng(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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-20
          • 2021-12-04
          相关资源
          最近更新 更多