问题详细信息:我已经花了整整两天的时间,但仍然找不到解决此问题的方法:
步骤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最后。
答案 0 :(得分: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
上设置一个复合主键,不允许重复。这样可以保证您的数据一致性。