0

经过 3 小时的访问介绍后,我需要设置一个小型数据库作为作业,但我完全失败了。但是,我在 YouTube 上播放了几个小时,但结果仍然没有变化。我是否尝试在访问中实现太多的 Excel 功能?

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

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

我的问题/问题:

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

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

我需要如何设置?

非常感谢尼娜

4

1 回答 1

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 的外键)

然后,您可以创建一个名为 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;

(通过在 UI 中创建一个新查询,然后取消表格提示并直接进入 SQL 视图。)接下来,创建一个表单来记录新的租赁,并将其基于 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
于 2013-11-26T11:49:36.430 回答