Как исправить событие «При изменении» для текстового поля, которое вызывает ошибку во время выполнения - PullRequest
0 голосов
/ 10 мая 2019

У меня есть форма для ввода информации об адресе в базу данных доступа. Страница имеет вид списка, который обновляется по мере записи информации в каждое из текстовых полей. Каждая строка имеет отдельное текстовое поле

Я обнаружил, что если информация вводится в одно из текстовых полей, удаляется (оставляя значение в значении "") и затем вводится повторно, возникает ошибка выполнения 5 в следующей строке:

key = CInt (Right (lstvw_AllAddresses.SelectedItem.key, Len (lstvw_AllAddresses.SelectedItem.key) - 3))

После тестирования несколько раз, я смог обнаружить, что эта ошибка будет происходить ТОЛЬКО в строке 2-5, а не в строке 1 (я могу опубликовать это здесь также, если необходимо) и ТОЛЬКО, если другие поля "". Я не уверен, почему это так, но это может быть связано с добавлением строк в просмотр списка?

Private Sub txtbx_Line2_Change()
Dim rst As DAO.Recordset
Dim key, startIndex As Integer
Dim addLine, removeLine As Boolean

    If lstvw_AllAddresses.SelectedItem Is Nothing Then
        Exit Sub
    End If

    key = CInt(Right(lstvw_AllAddresses.SelectedItem.key, Len(lstvw_AllAddresses.SelectedItem.key) - 3)) 'This is where the error is thrown
    Set rst = CurrentDb.OpenRecordset("SELECT [Line2]" & _
            " FROM [tbl_Addresses]" & _
            " WHERE [AddressID] = " & key)

    addLine = False
    removeLine = False
    If IsNull(rst![Line2]) Or rst![Line2] = "" Then        'line is blank, so we're adding a line
        addLine = True
    ElseIf txtbx_Line2.Text = "" Then
        removeLine = True
    End If
    rst.Edit
    rst![Line2] = txtbx_Line2.Text
    rst.Update

    'change the text in the listview

    If addLine Then
        startIndex = lstvw_AllAddresses.ListItems("ln1" & key).index  'assume start index = Line1
        lstvw_AllAddresses.ListItems.Add startIndex + 2 - 1, "ln2" & key
        lstvw_AllAddresses.ListItems("ln2" & key).Selected = True
    ElseIf removeLine Then
        lstvw_AllAddresses.ListItems.Remove "ln2" & key
    End If

    If Not removeLine Then
        lstvw_AllAddresses.ListItems("ln2" & key).Text = rst![Line2]
    End If

Close_Exit:
    rst.Close

Good_Exit:
    Exit Sub
End Sub


Что является причиной этой ошибки и как ее исправить?

1 Ответ

1 голос
/ 10 мая 2019

Правильно объявляйте ключ и не используйте CInt, который не работает для недопустимых выражений:

Dim key As Integer
Dim startIndex As Integer
Dim addLine As Boolean
Dim removeLine As Boolean

    If lstvw_AllAddresses.SelectedItem Is Nothing Then
        Exit Sub
    End If

    If Len(lstvw_AllAddresses.SelectedItem.key) - 3 > 0 Then
        key = Val(Right(lstvw_AllAddresses.SelectedItem.key, Len(lstvw_AllAddresses.SelectedItem.key) - 3)) 
    End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...