在Access-VBA中使用SQL查询仅创建非重复记录

问题描述 投票:1回答:1

问题详情:我已经花了将近两整天,我仍然无法找到解决这个问题的方法:

第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。

ms-access access-vba ms-access-2016
1个回答
0
投票

您可以根据表中已有的最后一个值启动循环。像这样的东西:

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上设置复合主键,不允许任何重复。这将保证您的数据一致性。

© www.soinside.com 2019 - 2024. All rights reserved.