访问/验证规则 - 计算

时间:2013-11-26 10:49:37

标签: ms-access validationrule

我需要在访问介绍3小时后设置一个小型数据库作为一项任务,我完全失败了。但是我开了好几个小时但结果仍然没有变化。我是否试图将太多的Excel功能强加到访问中?

我在一个已解决的问题中看到,如果可以在访问中进行计算吗?

我有三张桌子用于DVD租赁业务。客户,电影,租赁。

我的问题/问题:

我想针对客户的年龄和电影的年龄限制进行年龄检查。我有客户的出生日期和电影的年龄限制。提供字段DoB 15/03/1996,年龄限制18+。例如,用户出生于15/03/1996,并想租一部电影18+。访问应该显示客户当前的年龄,如:字段名称:年龄; “17”。这根本没有用。我在设置字段/计算的第一步中失败了。

在excel中,它通常是= INT((TODAY() - DoB)/365.25),它告诉你年龄最新。

我如何设置?

非常感谢提前 尼娜

1 个答案:

答案 0 :(得分:1)

您需要将Excel公式转换为使用VBA函数。由于Int存在于VBA中,并且Excel UI,VBA和Access数据库引擎(DAO / ADE)都使用OLE日期/时间格式,因此转换非常简单 - 只需使用Date函数代替TODAY

所以,说这些表是这样设置的:

  1. 客户 - CustomerID(自动编号,主键),姓氏(文本,必填),姓名(文本,必填),DoB(日期/时间,必填)

  2. 电影 - MovieID(自动编号,主键),MovieTitle(文本,必填),MinAge(数字/字节)

  3. 租借 - RentalID(自动编号,主键),CustomerID(数字/长整数,必需,Customers.CustomerID的外键),MovieID(数字/ LongInteger,必需,Movies.MovieID的外键)
  4. 然后您可以创建一个名为RentalsWithAge的查询:

    SELECT Rentals.*, Movies.MinAge, Int((Date() - Customers.DoB) / 365.25) AS CustomerAge
    FROM (Rentals INNER JOIN Customers ON Rentals.CustomerID = Customers.CustomerID)
    INNER JOIN Movies ON Rentals.MovieID = Movies.MovieID;
    

    (在取消表格提示并直接进入SQL视图之前,先在UI中创建一个新查询。)接下来,创建一个表单来记录新的租借,并将其建立在RentalsWithAge(而不是Rentals)上);确保所讨论的所有字段都已添加到表单中,然后处理表单的BeforeUpdate事件:

    Private Sub Form_BeforeUpdate(Cancel As Integer)
      If Me.CustomerAge < Nz(Me.MinAge, 0) Then
        Cancel = True
        MsgBox "Customer is under the minumum age for the chosen movie!", _
          vbCritical, "Customer Under Age"
      End If
    End Sub