在引入访问3个小时后,我需要设置一个小型数据库作为分配,但我完全失败了。然而,我花了几个小时,但结果仍然没有变化。我是否试图在access中嵌入太多excel函数?
我在一个已解决的问题中看到,它是否可以在访问中进行计算?
我有三张dvd出租的桌子。客户、电影、租赁。
我的问题:
我想对客户的年龄和电影的年龄限制进行年龄检查。我有客户的出生日期和看电影的年龄限制。提供的字段DoB 1996年3月15日,年龄限制为18岁以上。例如,用户出生于1996年3月15日,想租一部18+的电影。Access应该向我显示客户的当前年龄,如:字段名称:年龄;"17"。这根本没有成功。我在设置字段/计算的第一步中失败了。
在excel中,通常是=INT((TODAY()-DoB)/365.25),它告诉你最新的年龄。
我需要如何设置?
非常感谢Nina
您需要转换Excel公式才能使用VBA函数。由于Int
存在于VBA中,并且Excel UI、VBA和Access数据库引擎(DAO/ADE)都使用OLE日期/时间格式,因此转换非常简单-只需使用Date
函数代替TODAY
即可。
所以,假设表格是这样设置的:
-
客户-客户ID(自动编号,主键)、姓氏(文本,必填)、Forename(文本,必需)、DoB(日期/时间,必填)
-
电影-电影ID(自动编号,主键)、电影标题(文本,必填)、分钟(数字/字节)
- Rentals-RentalID(自动编号,主键)、CustomerID(数字/长整型,必需,Customer.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;
(在取消表提示并直接进入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