【发布时间】:2015-05-12 13:07:31
【问题描述】:
我似乎无法找出使用 VBA 来识别我的记录表是否已经具有唯一的 3 列数据组合的最佳方法。
我的表如下:
CREATE TABLE sometable(
col1 NUMERIC,
col2 NUMERIC,
col3 NUMERIC,
col4 NUMERIC,
Primary Key(col1, col2, col3)
);
现在在我的表单中,我正在向表中添加值(即,用户填写 3 个字段,单击 add 按钮并将其插入到表中)。
如果数据行已经存在,按下add 按钮不会执行任何操作。
我想要实现的是检查(使用 VBA)这样的行是否已经存在(基于 col1 和 col2 和 col3 的唯一性)将已有记录的 col4 与新添加相加。
例如,如果我已经存在的数据是这样的:
col1 col2 col3 col4
1 2 3 10
1 3 3 20
并且用户想要添加:
1 1 1 10
它只会在表格中添加一个新行。 但是,如果他想添加:
1 2 3 10
这将导致表格:
col1 col2 col3 col4
1 2 3 20 'added up col4 here
1 3 3 20
1 1 1 10
我不想让 Auto-ID 递增为 col0 的原因是因为我必须检查 col1、col2 和 col3 中的值以确定是应该添加新数据还是简单地重新计算.
【问题讨论】:
-
在企业数据库中,这称为
MERGE,或Upserting。在 mySQL 中是on duplicate key update。我无法在 msAccess 中找到等价物。我所能想到的就是将其编码为插入,捕获重复键错误,然后将其应用为更新语句。 (反之亦然代码更新时找不到记录然后插入) -
如何捕获重复键错误?目前,当我插入已经存在的新数据行时,我没有收到任何错误 - 它什么也不做(没有错误)。
-
"什么都不做......包括不插入新行?"连接对象应该有一个错误方法,您应该在更新后检查它。 stackoverflow.com/questions/5389634/… 是一些错误处理的示例