Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access-VBA无效地使用null_Vba_Ms Access_Runtime Error - Fatal编程技术网

Access-VBA无效地使用null

Access-VBA无效地使用null,vba,ms-access,runtime-error,Vba,Ms Access,Runtime Error,我正在为Access窗体中的按钮编写VBA代码。我希望用户插入的信息能够将新记录添加到特定的表中,即tablefunctionario。当我只在必填字段中插入数据时,如果启用了这行代码,我会收到一条错误消息: Observacoes = Me.Observacoes.Value 错误显示无效使用Null 以下是我正在编写的完整代码: Private Sub new_func_Click() Dim Id_Funcionario As Integer Dim Primeiro_

我正在为Access窗体中的按钮编写VBA代码。我希望用户插入的信息能够将新记录添加到特定的表中,即table
functionario
。当我只在必填字段中插入数据时,如果启用了这行代码,我会收到一条错误消息:

Observacoes = Me.Observacoes.Value
错误显示
无效使用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
有人能帮我吗?我不知道我做错了什么,谢谢。

这行

Dim Primeiro_Nome, Ultimo_Nome, NIF, Sexo, Morada, Localidade, Email, Contacto, Foto, Observacoes As String  
仅将
观测值
声明为
字符串
,其余均为
变体
。要将它们全部用作字符串,应使用:

Dim Primeiro_Nome As String, Ultimo_Nome As String,....
变量
可以包含
Null
值,而
字符串
不能

您可以将该行更改为:

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

错误消息表示表单控件
Me.Observacoes
Null
(因此尚未输入任何值)。请记住,如果要检查
Observacoes
,则需要使用
if Observacoes=“”
,而不是
if ISNULL(Observacoes)
(不需要
=TRUE
部分)。请注意,您尚未解决字符串串联问题,而不是使用参数和空值。这将导致OP在数据库中存储长度为零的字符串,而不是实际的空值,这可能会导致意外的结果和麻烦。我强烈建议保留空值,并确保在插入数据时永远不要使用字符串连接。@ErikVonAsmuth的观点很好-也许我应该阅读
RunSQL
语句,以便在上下文中了解所有内容。