vba, пока цикл не работает — форма доступа

#ms-access #vba

#ms-access #vba

Вопрос:

У меня есть основная форма с подчиненной формой под ней. В основной форме есть опция «перезаписать», в которой я могу ввести значение в txtComments, и затем оно будет вводить значение в поле subform.comments только в том случае, если его флажок имеет истинное значение (например, установлен флажок)

В нынешнем виде я использую этот код, который работает только для выбранной строки данных, а не для всего набора данных подчиненной формы:

(примечание: я упростил имена полей и значений)

 Private Sub Command118_Click()

    Dim rst As Recordset, i As Integer

    Set rst = Subform.RecordsetClone
    i = 0
    rst.MoveFirst
    Do While Not rst.EOF
        i = i   1
        rst.Edit

        If [SubformCheckbox] = True Then
            [SubformComments] = [txtComments]
        Else
            [SubformComments] = 0
        End If

        rst.Update
        rst.MoveNext
    Loop

    rst.Close
    Set rst = Nothing
End Sub
  

Ответ №1:

Вы использовали неправильные переменные. Попробуйте это:

     If rst![SubformCheckbox] = True Then
        rst![SubformComments] = [txtComments]
    Else
        rst![SubformComments] = 0
    End If
  

Если вы хотите не трогать непроверенные записи, измените цикл следующим образом:

 With rst
    Do While Not .EOF
        If ![SubformCheckbox] = True Then
            .Edit
            ![SubformComments] = [txtComments]
            .Update
        End If
        .MoveNext
    Loop
End With
  

Для повышения производительности вы можете отфильтровать набор записей, оставив только отмеченные строки, а затем обновить их все в цикле, но наилучшая производительность будет достигнута, если вы будете использовать UPDATE SQL-запрос для обновления таблицы напрямую, вообще не используя recordset .

Комментарии:

1. Однако, могу ли я заставить оператор Else оставить существующие поля комментариев в покое?

2. например. Если он найдет строку флажка с истинным значением, добавьте форму TXTComment в основную форму, иначе ничего не делайте

3. Если это сработало для вас, вы должны проверить ответ как правильный

4. извините за это, проверено сейчас 🙂

5. Отредактировал ответ