Access - VBA неверное использование null - PullRequest
0 голосов
/ 18 декабря 2018

Я пишу код VBA для кнопки в форме доступа.Я хочу, чтобы информация, вставленная пользователем, добавляла новую запись в конкретную таблицу, таблицу Funcionario.Когда я вставляю данные только в обязательные поля, я получаю сообщение об ошибке, если у меня включена эта строка кода:

Observacoes = Me.Observacoes.Value

Ошибка говорит: Invalid use of Null.

Вот полный код, над которой я работаю:

Private Sub new_func_Click()

    Dim Id_Funcionario As Integer
    Dim Primeiro_Nome, Ultimo_Nome, NIF, Sexo, Morada, Localidade, Email, Contacto, Foto, Observacoes As String
    Dim Data_Nascimento, Data_contrato_i, Data_contrato_f As Date

    Id_Funcionario = Me.Id_Funcionario.Value
    Primeiro_Nome = Me.Primeiro_Nome.Value
    Ultimo_Nome = Me.Ultimo_Nome.Value
    NIF = Me.NIF.Value
    Data_Nascimento = Me.Data_Nascimento.Value
    Sexo = Me.Sexo.Value
    Morada = Me.Morada.Value
    Localidade = Me.Localidade.Value
    Email = Me.Email.Value
    Contacto = Me.Contacto.Value
    Data_contrato_i = Me.Data_contrato_i.Value
    Observacoes = Me.Observacoes.Value
    Foto = Me.Foto.Value
    Data_contrato_f = ""

    'If IdFunc, NIF and Data_contrato_i empty:

    If IsNull(Me.Id_Funcionario.Value) = True Or IsNull(Me.NIF.Value) = True Or IsNull(Me.Data_contrato_i.Value) = True Then
        MsgBox "Please insert data in the required fields", vbExclamation, "Warning"
    Else
        DoCmd.RunSQL "INSERT INTO Funcionario (Id_Funcionario, Primeiro_Nome, Ultimo_Nome, NIF, Data_Nascimento, Sexo, Morada, Localidade, Email, Contacto, Data_contrato_i, Data_contrato_f, Observacoes, Foto) VALUES ('" & Id_Funcionario & "', '" & Primeiro_Nome & "', '" & Ultimo_Nome & "', " & NIF & ", '" & Data_Nascimento & "', '" & Sexo & "', '" & Morada & "', '" & Localidade & "', '" & Email & "', '" & Contacto & "', '" & Data_contrato_i & "', '" & Data_contrato_f & "', '" & Observacoes & "', '" & Foto & "')"
    End If
End Sub

Может кто-нибудь помочь мне?Я не знаю, что я делаю не так, спасибо.

1 Ответ

0 голосов
/ 18 декабря 2018

Эта строка

Dim Primeiro_Nome, Ultimo_Nome, NIF, Sexo, Morada, Localidade, Email, Contacto, Foto, Observacoes As String  

объявляет только Observacoes как String, все остальные Variants.Чтобы иметь их все в виде строк, вы должны использовать:

Dim Primeiro_Nome As String, Ultimo_Nome As String,....

A Variant может содержать значение Null, а String - нет.

Вы можете изменить строку на:

Observacoes = NZ(Me.Observacoes.Value,"") 

, которая заменит значение Null пустой строкой.

Редактировать после принятого ответа:

Как прокомментировал @Erik, используя параметры , значительно упростил процесс.Параметры в приведенном ниже коде: MyID и MyPrimeiro, но вы можете использовать практически любой текст для имени параметра.

Private Sub new_func_Click()

    If IsNull(Me.Id_Funcionario) Or IsNull(Me.Primeiro_Nome) Then
        MsgBox "Please insert data in the required fields.", vbOKOnly + vbExclamation, "Warning"
    Else
        With CurrentDb.CreateQueryDef("", _
            "PARAMETERS MyID LONG, MyPrimeiro TEXT(255); " & _
            "INSERT INTO Funcionario (Id_Funcionario, Primeiro_Nome) VALUES (MyID, MyPrimeiro)")

            .Parameters("MyID") = Me.Id_Funcionario
            .Parameters("MyPrimeiro") = Me.Primeiro_Nome
            .Execute

        End With
    End If

End Sub
...