Создавайте только неповторяющиеся записи, используя SQL-запросы в Access-VBA - PullRequest
1 голос
/ 17 марта 2019

Сведения о проблеме. Я провел почти два полных дня, но до сих пор не могу найти решение этой проблемы:

Шаг 1: у меня есть таблица с именем «table1». Он имеет три поля, которые уже заполнены. Я создал их, используя SQL-запрос вставки из VBA:

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) одинаковыми и просто изменяю входную переменную для field_C в таблице 1 с помощью выпадающего списка. Здесь я изменил его на 5.

Я хочу, чтобы запрос вставки выполнялся снова, но не вставляйте записи для значений 1, 2 и 3, поскольку они уже существуют, а вместо этого просто создайте значения 4 и 5. В целевой таблице должны быть значения в поле C: 1, 2,3,4,5 в конце.

1 Ответ

0 голосов
/ 17 марта 2019

Вы можете начать свой цикл на основе последнего значения, уже имеющегося в таблице. Примерно так:

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, запретив любые дубликаты. Это гарантирует вашу согласованность данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...