问题详情:我已经花了将近两整天,我仍然无法找到解决这个问题的方法:
第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。
您可以根据表中已有的最后一个值启动循环。像这样的东西:
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
上设置复合主键,不允许任何重复。这将保证您的数据一致性。