我需要在访问介绍3小时后设置一个小型数据库作为一项任务,我完全失败了。但是我开了好几个小时但结果仍然没有变化。我是否试图将太多的Excel功能强加到访问中?
我在一个已解决的问题中看到,如果可以在访问中进行计算吗?
我有三张桌子用于DVD租赁业务。客户,电影,租赁。
我的问题/问题:
我想针对客户的年龄和电影的年龄限制进行年龄检查。我有客户的出生日期和电影的年龄限制。提供字段DoB 15/03/1996,年龄限制18+。例如,用户出生于15/03/1996,并想租一部电影18+。访问应该显示客户当前的年龄,如:字段名称:年龄; “17”。这根本没有用。我在设置字段/计算的第一步中失败了。
在excel中,它通常是= INT((TODAY() - DoB)/365.25),它告诉你年龄最新。
我如何设置?
非常感谢提前 尼娜
答案 0 :(得分:1)
您需要将Excel公式转换为使用VBA函数。由于Int
存在于VBA中,并且Excel UI,VBA和Access数据库引擎(DAO / ADE)都使用OLE日期/时间格式,因此转换非常简单 - 只需使用Date
函数代替TODAY
。
所以,说这些表是这样设置的:
客户 - CustomerID(自动编号,主键),姓氏(文本,必填),姓名(文本,必填),DoB(日期/时间,必填)
电影 - MovieID(自动编号,主键),MovieTitle(文本,必填),MinAge(数字/字节)
然后您可以创建一个名为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