Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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 - Fatal编程技术网

Ms access 防止在同一个月访问中出现重复条目

Ms access 防止在同一个月访问中出现重复条目,ms-access,Ms Access,我有一个表,每个月更新一次,但超过一周。表1有4个重要字段日期,地点,位置,和读取。为了防止重复的表格条目,我将日期,地点,地点字段设置为主键,这样用户就不会输入重复的地点、地点和日期组合。这仅适用于所有三个都是重复的情况,如果日期晚于一天,则会将其添加到表中。由于我的日期输入可能跨越数天,如果数据输入不仔细,或重复数据在一天后与下一批地点、地点和读数一起发送到办公室,则可能会在同一个月内重复输入 是否有办法确保在同一个月内不会输入重复的地点、地点组合? 地点、位置和日期都需要允许重复,但不允许

我有一个表,每个月更新一次,但超过一周。表1有4个重要字段
日期
地点
位置
,和
读取
。为了防止重复的表格条目,我将
日期
地点
地点
字段设置为主键,这样用户就不会输入重复的地点、地点和日期组合。这仅适用于所有三个都是重复的情况,如果日期晚于一天,则会将其添加到表中。由于我的日期输入可能跨越数天,如果数据输入不仔细,或重复数据在一天后与下一批地点、地点和读数一起发送到办公室,则可能会在同一个月内重复输入

是否有办法确保在同一个月内不会输入重复的地点、地点组合?
地点、位置和日期都需要允许重复,但不允许三者都重复。

使用查询作为表单的来源:

Select 
    [Date], Place, Location, Reading, Format([Date], "yyyymm") As YearMonth
From
    YourTable
现在,在用于数据输入的表单中,拉入
YearMonth
,并在BeforeUpdate事件中,使用如下内容:

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.FindFirst "[Place] = '" & Me!Place.Value & "' And Location = '" & Me!Location.Value & "' And YearMonth = " & Format(Me!Date.Value, "yyyymm") & ""
Cancel = Not rs.NoMatch

If Cancel = True Then
    MsgBox "Data for this month has been recorded."
End If

据我所知,你每个月需要一张唱片

从数据库的角度来看,数据库在第二天接受是可以的,因为没有检测到重复的组合

首先,正如@nicomp所说。。。 您可以使用表单强制执行业务逻辑

第二,你可以改变你的表和改变组合。。例如:

将“日期”属性分为2个组合,月份和年份。。。 您将得到4个主键组合
Month(Integer)
Year(Integer)
Place
Location

只需使用“希望唯一的所有字段的组合索引”


您不能为部分属性(日期的月份)创建索引使用Access。我假设您有一个GUI:这将是执行验证逻辑的地方。使用VBA,您可以将日期分解为月、日、年,并执行业务规则。我使用表单将数据输入表中,对于VBA,我是一个新手。我曾尝试使用计算字段将日期分隔为m“月”和“年”字段,但不能将计算字段作为主键,这在我看来通常被认为是一个非常糟糕的主意。我尝试将日期字段与计算字段分离,只提取日期后的月份和年份,但计算字段不能作为主键,经过一些研究,似乎每个人都同意这是一件坏事。我是VBA的新手。如果可能的话,在不增加表单上需要输入的字段数量的情况下分割日期字段的更好方法是什么?因此,在这种情况下,您必须在保存之前验证日期…我认为正确的方法是固定日期的日期值…例如,我n您选择了2015年12月10日的表单…在将记录保存到表中之前,您需要将日期设置为1..,因此您将以2015年12月1日结束并保存它…因此,当用户下次输入12月份的任何日期并尝试保存它时,数据库将通知检测到重复键。。。