Error de sintaxis en la instrucción UPDATE (Error 3144)

Estoy intentando actualizar una lista de campos en un formulario pero cuando hay algún campo en blanco (sin rellenar), me aparece este error en la ejecución.

En el diseño de la BD de Access, los campos que pueden estar nulos y/o vacíos, tiene como característica que permitan longitud cero, no indexados, no requeridos y no están relacionados. Son de tipo numéricos.

La sentencia de la consulta es la siguiente:

CurrentDb.Execute "UPDATE RegistroMaterial SET IdCCReceptora = " & IIf(IsNull(Me.cmbCCReceptora.Value), Null, Me.cmbCCReceptora.Value) & _
", IdCCRemitente = " & IIf(IsNull(Me.cmbCCRemitente.Value), Null, Me.cmbCCRemitente.Value) & ", IdEstado = " & Me.cmbEstado.Value & _
", IdMaterial = " & Me.cmbNombreEquipo.Value & ", NEquipo = '" & IIf(IsNull(Me.txtNumeroEqu.Value), Null, Me.txtNumeroEqu.Value) & _
"', IdCodRed = " & IIf(IsNull(Me.cmbNombreRed.Value), Null, Me.cmbNombreRed.Value) & _
"Observaciones = '" & IIf(IsNull(Me.txtObservaciones.Value), Null, Me.txtObservaciones.Value) & "' WHERE Id = " & Me.lstMaterial.Column(0), dbFailOnError

Por último aparece con un operador ternario preguntando si es nulo, pero lo he intentado directamente asignando los campos como Null y Empty pero sigue el error.

También he intentado con la sentencia:

CurrentDb.Execute "UPDATE RegistroMaterial SET IdCCReceptora = " & Null & " WHERE Id = " & Me.lstMaterial.Column(0), dbFailOnError

No entiendo por qué parece que es necesario que el campo IdCCReceptora (o cualquier otro), no pueda ser nulo.

1

1 Respuesta

7.350 pts. VBA, SQL, Bases de datos, linux (debian)

1. Lo principal es que en el diseño de la tabla subyacente el valor "Requerido" para esos campos sea NO.

2. Por lo demás cuando escribes:

"UPDATE RegistroMaterial SET IdCCReceptora = " & Null & " WHERE Id = " & Me.lstMaterial.Column(0)

Estas enviando la siguiente sentencia:

UPDATE RegistroMaterial SET IdCCReceptora = WHERE .........

cuando simplemente lo que pretendes es:

UPDATE RegistroMaterial SET IdCCReceptora = NULL WHERE ................... (por lo que puedes escribir):

CurrentDb.Execute "UPDATE RegistroMaterial SET IdCCReceptora = NULL WHERE Id = " & Me.lstMaterial.Column(0)


3. Para manejar valores null es mas cómoda la función Nz() que iif(), pero de todas formas son innecesarios, pues lo que pretenden hacer es lo que por defecto hacen todas las bases de datos.


No se si he respondido tu pregunta...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas