答案 0 :(得分:2)
要添加到@Kevin Ross,“在数据库级别”执行规则的机制是CHECK
约束,例如
ALTER TABLE tblFoo ADD
CONSTRAINT tblFoo_bar__50_limit
CHECK (NOT EXISTS (
SELECT T1.Bar
FROM tblFoo AS T1
WHERE T1.Bar = 'Thing_you_only_want_50_of'
GROUP
BY T1.Bar
HAVING COUNT(*) > 50
));
Jet版本4.0(大约是Access 2000)中存在 CHECK
个约束,并且仍存在于ACE(例如Access 2010)中。
您需要在ANSI-92 Query Mode中使用SQL DDL创建CHECK
约束。不,您无法使用DAO或Access UI创建CHECK
约束,但这并不意味着它们不存在;)
如果由于某种原因你对SQL DDL有哲学上的反对意见,你可以使用额外的“序列”列,行级验证规则和复合UNIQUE
约束来做类似的事情,所有这些都可以使用DAO或Access UI已经在Jet中使用了多年,而不是我记得的。
以下是替代方法的概述:
ALTER TABLE tblFoo ADD
Bar__sequence INTEGER;
ALTER TABLE tblFoo ADD
CONSTRAINT tblFoo_bar_sequence__values
CHECK (
(
Bar <> 'Thing_you_only_want_50_of'
AND Bar__sequence IS NULL
)
OR (
Bar = 'Thing_you_only_want_50_of'
AND Bar__sequence BETWEEN 1 AND 50
)
);
ALTER TABLE tblFoo ADD
CONSTRAINT tblFoo_bar__50_limit
UNIQUE (Bar__sequence);
在这种情况下,可以使用Access UI中的表设计器实现上述三个SQL DDL语句的结果,即添加列,修改表验证规则并添加唯一索引。
答案 1 :(得分:0)
答案 2 :(得分:0)
答案 3 :(得分:0)
问题非常不明确。目前尚不清楚“选择”是否意味着“显示限于50个项目”或“允许用户创建限制为50个项目的数据记录”。我不会解释第一种解释,因为在我看来它并不相关。
假设某些其他的东西,如一个Jet / ACE后端(这个问题对我来说很有意义的唯一途径),你是如何做到这一点取决于您的Access版本。
直到并包括Access 2007:您必须在应用程序的用户界面中应用限制。编辑:由于@onedaywhen在他的回答指出,有可能使用DDL在SQL 92模式下添加基于其他记录组当前记录工作的检查约束。当我发布时,我不知道这是可能的。
在Access 2010中,你可以利用自己的新表级数据宏(其工作像触发器),并限制用户的50分选。
我没有提供其中任何一项的详细信息,因为没有提供足够的信息。