如何防止基于两列或更多列在Access DB中插入重复值

时间:2012-02-25 18:00:04

标签: excel ms-access excel-vba ms-access-2007 vba

是Access DB查询的新手

我的方案是

enter image description here

请帮助我使用Access DB中所需的代码,并建议我是否检索excel VBA中的值并验证这些条件或在Access DB本身中验证

如果我在Excel VBA中的变量中验证如何将列变量存储在Excel变量中并验证每条记录,因为查询将检索多条记录

请帮助我完成所需的代码

由于

Prabu M

2 个答案:

答案 0 :(得分:1)

插入ColumnBIsNull类型的第三列Yes/No,如果True为空,则设置ColumnB,否则设为False。然后在列ColumnAColumnBIsNull上创建唯一索引。

+--------------+---------+---------------------+
| ColumnA (UX) | ColumnB |  ColumnBIsNull (UX) |
+--------------+---------+---------------------+
| A            |  1      | False               |
+--------------+---------+---------------------+
| A            |  null   | True                |
+--------------+---------+---------------------+
| B            |  2      | False               |
+--------------+---------+---------------------+
| B            |  null   | True                |
+--------------+---------+---------------------+

标有(UX)

的唯一索引

条件

  1. 第一条记录总是好的。在您的示例{A,1}中,索引{A,False}。
  2. 唯一索引不允许第二个{A,1},因为索引将包含{A,False}两次。
  3. 唯一索引允许{A,null},因为现在索引是{A,True}。
  4. 唯一索引允许{B,1},因为现在索引是{B,False}。
  5. 唯一索引不允许{A,2},因为索引会再次包含{A,False}。

答案 1 :(得分:0)

这几乎听起来像这张桌子需要一些规范化。根据您的描述,ColumnB中的值只有两种可能:columnB为NULL,或者它的值完全取决于ColumnA中的值。我会定义两个表:

Table1
------
ColumnA    text(25)    -- or whatever datatype
HasColumnB YesNo

ColumnAValues
-------------
ColumnA text(25)
ColumnB integer

Table1(ColumnA, HasColumnB)上有唯一的索引或主键。 ColumnAValuesColumnA上有一个主键。然后在ColumnA上的两个表之间的Access中定义外键关系。

以下查询将返回原始问题中的表格:

SELECT t.ColumnA,
       IIf(t.HasColumnB, aval.ColumnB, NULL) AS ColumnB
FROM Table1 AS t INNER JOIN ColumnAValues AS aval
     ON t.ColumnA = aval.ColumnA;