时间:2010-07-25 18:46:47

标签: ms-access

4 个答案:

答案 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版本。

  1. 直到并包括Access 2007:您必须在应用程序的用户界面中应用限制。编辑:由于@onedaywhen在他的回答指出,有可能使用DDL在SQL 92模式下添加基于其他记录组当前记录工作的检查约束。当我发布时,我不知道这是可能的。

  2. 在Access 2010中,你可以利用自己的新表级数据宏(其工作像触发器),并限制用户的50分选。

  3. 我没有提供其中任何一项的详细信息,因为没有提供足够的信息。