我似乎无法找出确定我的记录表是否已使用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
我之所以不希望将自动ID递增为col0是因为我必须检查col1,col2和col3中的值,以确定是应该添加新数据还是仅仅重新添加-calculated。
答案 0 :(得分:0)
您可以使用一个查询执行此操作:
使用一个查询更新和附加记录
作者:Alan Biggs
您是否知道可以在Access中使用更新查询 同时更新和添加记录?如果你有这个,这很有用 表的两个版本,tblOld和tblNew,并且您想要集成 从tblNew到tblOld的变化。
请按照以下步骤操作:
创建更新查询并添加两个表。通过将tblNew的关键字段拖到tblOld的匹配字段来加入这两个表。
双击关系并选择包含来自tblNew的所有记录的连接选项以及仅包含来自tblNew的记录的连接选项 tblOld。
从tblOld中选择所有字段并将它们拖到QBE网格上。
对于每个字段,在tblNew.FieldName中的“更新到”单元格类型中,其中FieldName与tblOld的字段名称匹配。
从“视图”菜单中选择“查询属性”,并将“唯一记录”更改为“假”。 (这会关闭SQL中的DISTINCTROW选项 视图。如果你留下这个,你将只获得一个空白记录 结果,但您希望添加每个新记录的一个空白记录 to tblOld。)
- 醇>
运行查询,您会看到对tblNew的更改现在位于tblOld中。
这只会添加已添加到tblNew的tblOld记录。 tblOw中不存在于tblNew中的记录仍将保留 tblOld。
答案 1 :(得分:0)
我找到了两种处理此问题的一般方法。
(1)将包括错误处理 - 我发现这是一种不好的做法。
(2)将包括DCount函数以首先查找数据行,然后使用if条件来确定是否应使用UPDATE
或INSERT
。
因此我使用(2)如下:
If DCount("*", "sometable", "[col1]= " & Me.col1.value & " AND [col2] = " & Me.col2.value & " AND [col3] = " & Me.col3.value) = 0 Then
CurrentDB.Execute "INSERT ..."
Else
CurrentDB.Execute "UPDATE ..."
End If
(1)解决方案类似于:
On Error Resume Next
CurrentDb.Execute "INSERT ...", dbFailOnError
If Err.Number = 3022 Then
Err.Clear
CurrentDb.Execute "UPDATE ...", dbFailOnError
End If