在 Access-VBA 中使用 SQL 查询仅创建非重复记录
Posted
技术标签:
【中文标题】在 Access-VBA 中使用 SQL 查询仅创建非重复记录【英文标题】:Create only non-duplicate records using SQL queries in Access-VBA 【发布时间】:2019-03-17 10:23:04 【问题描述】:问题详情:我花了将近整整两天的时间,仍然无法找到解决此问题的方法:
第 1 步:我有一个名为“table1”的表。它具有三个已填充的字段。我使用 VBA 中的插入 SQL 查询创建了它们:
For n = 1 To .cbo_sbstRep Step 1
strsql = "INSERT INTO table1 (A, B, C ) " _
& "Values (" & .cbo1 & "," & .cbo2 & "," & n & ")"
CurrentDb.Execute strsql, dbFailOnError
Next n
这会在字段 C 中创建值:1、2、3
第 2 步:接下来,我保持 .cbo1(对应的 field_A)和 .cbo2(对应的 field_B)的值相同,并使用组合框更改表 1 中 field_C 的输入变量。在这里,我把它改成了 5。
我希望插入查询再次运行,但不要插入值 1、2 和 3 的记录,因为它们已经存在,而是只创建值 4 和 5。目标表应该在字段 C:1 中有值,最后是2,3,4,5。
【问题讨论】:
【参考方案1】:您可以根据表中已有的最后一个值开始循环。像这样的:
Dim start as Long
'get last value in column C, taking column A and B into consideration, and increment by 1
start = Nz(DMax("C","Table1", "A=" & .cbo1 & " and B=" & .cbo2), 0) + 1
If start >= .cbo_sbstRep Then
For n = start To .cbo_sbstRep Step 1
strsql = "INSERT INTO table1 (A, B, C ) " _
& "Values (" & .cbo1 & "," & .cbo2 & "," & n & ")"
CurrentDb.Execute strsql, dbFailOnError
Next n
End If
仅当组合框的值大于 C 列中的最大值时才会运行,将 A 列和 B 列考虑在内。
由于这是一个多对多表,您可以在表A, B and C
中的所有三个字段table1
上设置复合主键,不允许任何重复。这将保证您的数据一致性。
【讨论】:
实际上,它不起作用,因为这是一个多对多组合的联合表,其中存在重复项。此外,Dmax 也无济于事,因为该值还取决于其他两列。 我已根据您的多对多要求更新了答案。在 DMax 函数上添加过滤器。 如果我无法在第一篇文章中解释所有要求,我很抱歉。实际上,另一个问题是有时,DMax 不会有用。由于值可以是 1、3、5 和 2,因此缺少 4。在这种情况下,如果 Combobox 为 6,那么我的代码应该创建 2、4、6。顺便说一句,我已经找到了解决这个问题的方法。我想在这里分享代码,但它不允许粘贴。这是一个很长的代码,在这里输入会很乏味,因为它需要 5 个查询和两个循环。 @Lone 您可以使用您发现的解决方案来回答您自己的问题。你应该可以在里面放很多代码。 @SmrtGrunt 好的,我会试一试,如果可行的话。以上是关于在 Access-VBA 中使用 SQL 查询仅创建非重复记录的主要内容,如果未能解决你的问题,请参考以下文章
如何使用自定义 tf.Estimator 在张量板事件文件中仅创建一份图形副本?