dcount if оператор как часть вложенного делать, пока не цикл - PullRequest
0 голосов
/ 27 августа 2018

Большое спасибо всем за вашу помощь, когда я пытаюсь выяснить доступ / SQL / vba.

У меня есть приведенный ниже код, который должен добавить запись в [МОДЕЛИ СПИСКА ОПЦИЙ] для каждой «текущей» модели для определенного ИД ОПЦИИ (доступность по умолчанию «N»).

Private Sub btnAvailabilityAddTest_Click()

Dim f_strSQL As String

Dim model_strSQL As String
Dim optionID_strSQL As String

Dim modelRS As Recordset
Dim optionIDRS As Recordset

model_strSQL = "SELECT MODEL, [MODEL_NAME]" & _
                " FROM T_MODELS_LIST" & _
                " WHERE T_MODELS_LIST.Removed = 0"

optionID_strSQL = "SELECT OPTION_ID" & _
                    " FROM [OPTIONS LIST]" & _
                    " WHERE [PRICE PERIOD] = 'OCT18'"

Set optionIDRS = CurrentDb.OpenRecordset(optionID_strSQL, dbOpenForwardOnly)
Set modelRS = CurrentDb.OpenRecordset(model_strSQL, dbOpenForwardOnly)

' Availability add for new codes

Do While Not optionIDRS.EOF

    'Check if Option ID exists in [OPTIONS LIST MODELS], if count = 0 then
    If DCount("OPTION_ID", "[OPTIONS LIST MODELS]", "OPTION_ID = " & optionIDRS!OPTION_ID) = 0 Then

        Do While Not modelRS.EOF

            f_strSQL = "INSERT INTO [OPTIONS LIST MODELS] (OPTION_ID, MODEL, AVAILABILITY)" & _
                        " VALUES ('" & optionIDRS!OPTION_ID & "', '" & modelRS!MODEL & "', 'N')"

            RunSQL f_strSQL

            modelRS.MoveNext

        Loop

    End If

    optionIDRS.MoveNext

Loop

MsgBox ("Availabilities Added")

End Sub

Приведенный выше код работает, но добавит только первый идентификатор без записи в [МОДЕЛИ СПИСКА ОПЦИЙ], цикл модели работает как задумано.Если я запустите его снова, он ничего не добавит.Если я удаляю записи для идентификатора, который он только что добавил, и запускаю его снова, он снова добавит записи идентификаторов, как и предполагалось.

Я подозреваю, что это логическая проблема с использованием DCount, я попытался определить значение DCount и использовать его в качестве другого цикла, но у меня ничего не получилось.Я добавил msgbox для отображения количества и текущей записи, текущая запись перемещается как следует, но оператор if ничего не делает, коды имеют счет 17 (что и должно быть).Он должен работать только на 0.

Пожалуйста, игнорируйте имена таблиц, я работаю с БД, созданной в 2002 году, и это настоящий беспорядок ...

...