Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 访问/验证规则-计算_Ms Access_Validationrule - Fatal编程技术网

Ms access 访问/验证规则-计算

Ms access 访问/验证规则-计算,ms-access,validationrule,Ms Access,Validationrule,在3个小时的access介绍之后,我需要建立一个小数据库作为作业,我完全失败了。然而,我坚持了几个小时,结果仍然没有改变。我是否尝试在access中使用过多excel函数 我在一个已解决的问题中看到,是否可以在access中进行计算 我有三张桌子出租dvd。顾客、电影、租赁 我的问题: 我想对客户的年龄和电影的年龄限制进行年龄检查。我有客户的出生日期和电影的年龄限制。1996年3月15日提供的字段,年龄限制为18岁以上。例如,用户出生于1996年3月15日,想要租一部18岁以上的电影。Acces

在3个小时的access介绍之后,我需要建立一个小数据库作为作业,我完全失败了。然而,我坚持了几个小时,结果仍然没有改变。我是否尝试在access中使用过多excel函数

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

我有三张桌子出租dvd。顾客、电影、租赁

我的问题:

我想对客户的年龄和电影的年龄限制进行年龄检查。我有客户的出生日期和电影的年龄限制。1996年3月15日提供的字段,年龄限制为18岁以上。例如,用户出生于1996年3月15日,想要租一部18岁以上的电影。Access应显示客户的当前年龄,如:字段名:年龄;"17". 这根本不起作用。我在设置字段/计算的第一步失败

在excel中,它通常是=INT((今天()-DoB)/365.25),告诉您最新的年龄

我需要如何设置它

非常感谢
Nina

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

那么,假设表格是这样设置的:

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

  • 电影-电影ID(自动编号,主键),电影字幕(文本,必填),MinAge(数字/字节)

  • Rentals-RentalID(自动编号,主键),CustomerID(编号/长整数,必填项,客户外键.CustomerID),MovieID(编号/长度,必填项,电影外键.MovieID)
  • 然后,您可以创建一个名为RentalWithAge的查询,如下所示:

    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中创建一个新查询来完成此操作。)接下来,创建一个表单来记录新的租金,并基于RentalWithAge(而不是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
    
    Private子表单\u更新前(取消为整数)
    如果Me.CustomerAge
    非常感谢您!我读了你的答案好几遍,但我还不足以理解说明以及在条件查询中输入的内容。我多次看到类似灰色框中的代码,但我不知道在何处以及如何键入。当我不能实现它时,我可以把它简化一些吗。但我非常感谢你们。你们试着实现克里斯的答案了吗?它有效吗?嗨,Guillem,我尝试实现Chris answer并打开一个查询,从电影表中选择complete Rental table和MinAge。但是我不知道下一步该怎么做。@user3035621-这是“创建一个名为RentalsWithAge的查询”的部分还是其他什么?正如我在后面的括号中所说,要直接输入SQL代码(即
    SELECT
    stuff),您需要创建一个新的查询,但要立即取消表选择器并进入SQL视图。嗨,Chris。问题是我根本没有学习SQL。但我会尝试一下,稍后在youtube上发布。谢谢你,尼娜