Как добавить ловушку ошибки в мой код, который будет игнорировать нулевое значение, извлеченное из моей базы данных MS Access? - PullRequest
0 голосов
/ 20 января 2019

Как я могу сделать ловушку для ошибки, которая игнорировала бы любое нулевое значение, извлеченное из базы данных ms access)?

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

в этом коде ошибка выделяет
.SubItems (6) = rs3! Regularization_Date

, поскольку Regularization_Date пусто в моей базе данных.я хочу, чтобы моя программа просто проигнорировала это и продолжила заполнять мой список со всеми данными, которые нужно показать.

 Private Function SearchData()

Result.Show

Result.ListView1.ListItems.Clear
Sql = "SELECT * FROM All_Employees WHERE ID LIKE '" & (Text1.Text) & "'"

Set rs3 = New ADODB.Recordset
rs3.Open Sql, con3, adOpenDynamic, adLockOptimistic
If Not rs3.EOF Then
 Do Until rs3.EOF
Set lst1 = Result.ListView1.ListItems.Add(, , rs3!ID)

    With lst1

     .SubItems(1) = rs3!Lastname
     .SubItems(2) = rs3!FirstName
     .SubItems(3) = rs3!Position
    .SubItems(4) = rs3!Date_hired
    .SubItems(5) = rs3!Employment_Status
    *.SubItems(6) = rs3!Regularization_Date*
    .SubItems(7) = rs3!Office_email
    .SubItems(8) = rs3!Shift_Start
    .SubItems(9) = rs3!Shift_End
    End With
rs3.MoveNext
Loop


End If
Set rs3 = Nothing
End Function

я просто хочу ошибочную ошибку, которая игнорировала бы все нулевые значения.

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Если вы просто хотите игнорировать ошибку, вы можете использовать On Error Resume Next

Private Function SearchData()

Result.Show

Result.ListView1.ListItems.Clear
Sql = "SELECT * FROM All_Employees WHERE ID LIKE '" & (Text1.Text) & "'"

**On Error Resume Next**

Set rs3 = New ADODB.Recordset
rs3.Open Sql, con3, adOpenDynamic, adLockOptimistic
If Not rs3.EOF Then
 Do Until rs3.EOF
Set lst1 = Result.ListView1.ListItems.Add(, , rs3!ID)

    With lst1

     .SubItems(1) = rs3!Lastname
     .SubItems(2) = rs3!FirstName
     .SubItems(3) = rs3!Position
    .SubItems(4) = rs3!Date_hired
    .SubItems(5) = rs3!Employment_Status
    *.SubItems(6) = rs3!Regularization_Date*
    .SubItems(7) = rs3!Office_email
    .SubItems(8) = rs3!Shift_Start
    .SubItems(9) = rs3!Shift_End
    End With
rs3.MoveNext
Loop


End If
Set rs3 = Nothing
End Function
0 голосов
/ 24 января 2019

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

.SubItems(1) = rs3!Lastname
.SubItems(2) = rs3!FirstName
.SubItems(3) = rs3!Position
.SubItems(4) = rs3!Date_hired
.SubItems(5) = rs3!Employment_Status
if not IsNull(rs3!Regularization_Date) then
    .SubItems(6) = rs3!Regularization_Date
end if
.SubItems(7) = rs3!Office_email
.SubItems(8) = rs3!Shift_Start
.SubItems(9) = rs3!Shift_End

Более подробную информацию вы можете найти здесь Документы IsNull в Microsoft

Если вы действительно хотите это в обработчике ошибок, вы можете сделать это так:

Private Function SearchData()

    on error goto ErrHandler:
    Result.Show
    Result.ListView1.ListItems.Clear
    Sql = "SELECT * FROM All_Employees WHERE ID LIKE '" & (Text1.Text) & "'"

    Set rs3 = New ADODB.Recordset
    rs3.Open Sql, con3, adOpenDynamic, adLockOptimistic
    If Not rs3.EOF Then
    Do Until rs3.EOF
        Set lst1 = Result.ListView1.ListItems.Add(, , rs3!ID)

        With lst1
            .SubItems(1) = rs3!Lastname
            .SubItems(2) = rs3!FirstName
            .SubItems(3) = rs3!Position
            .SubItems(4) = rs3!Date_hired
            .SubItems(5) = rs3!Employment_Status
            .SubItems(6) = rs3!Regularization_Date
            .SubItems(7) = rs3!Office_email
            .SubItems(8) = rs3!Shift_Start
            .SubItems(9) = rs3!Shift_End
        End With
        rs3.MoveNext
    Loop
End If

Cleanup:
    Set rs3 = Nothing

    exit function

ErrHandler:
    dim intErrNo    as integer
    dim strErrMsg   as string

    intErrNo = Err.Number
    strErrMsg = Err.Description

    if intErrNo = 94 then
        'Null Value continue with the next line of the code
        resume next
    else
        MsgBox "Error Number: " & intErrNo & vbCrLF & "Description : " & strErrMsg
        GoTo CleanUp
    end if

End Function

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

...