Hola!
No sé si estoy entendiendo el problema que tienes pero ahí tienes mis comentarios:
- Si estás empleando un Iif() la sistemática que estás utilizando es la correcta y requiere la sintaxis como la estás usando para poder actualizar la fecha a un valor null.
- Si quieres comprobar que el otro sistema funciona tienes que "convertir" ese Iif() en un bloque condicional que realice o bien una actuación en función del cumplimiento de la condición, u otra si no se cumple. En este caso, lógicamente estás cambiando la sintaxis y, por tanto, la mecánica de inserción de null en un campo fecha (o en el que sea). Yo no cambiaría el Iif() porque, si te funciona, pues bien está lo que bien acaba, pero si quieres probar lo que te comentaba lo que tienes que hacer es esto:
Código: Seleccionar todo
'Datos nacimiento
If IsNull(Me.txtFecha_Nac) Then
CurrentDb.Execute ("UPDATE [tabArtistas] SET [NAC_FECHA] = Null WHERE [ARTISTA] = '" & Me.txtArtista.Value & "'")
Else
CurrentDb.Execute ("UPDATE [tabArtistas] SET [NAC_FECHA] = #" & Format(Me.txtFecha_Nac.Value, "mm/dd/yyyy") & "# WHERE [ARTISTA] = '" & Me.txtArtista.Value & "'")
End If
'16 .RunSQL "UPDATE [tabArtistas] SET [NAC_FECHA] = " & IIf(IsNull(Me.txtFecha_Nac.Value), "Null", "#" & Format(Me.txtFecha_Nac.Value, "mm/dd/yyyy") & "#") & " WHERE [ARTISTA] = '" & Me.txtArtista.Value & "'"
Por otra parte, el método docmd.runsql es un método que permite la ejecución de una instrucción sql y, como elemento adicional, permite la inclusión de la misma en una transacción o no. No tiene otros modificadores (
https://docs.microsoft.com/es-es/office/vba/api/access.docmd.runsql)
El método currentdb.execute permite la ejecución de una instrucción sql, pero tiene bastantes constantes, todas opcionales, que permiten dominar el comportamiento de lo que pasa en la propia ejecución de la sql. El típico ejemplo para explicar esto es utilizarlo con la constante dbFailOnError. Es decir, que si yo escribo, por ejemplo:
Código: Seleccionar todo
Currentdb.execute ("UPDATE TablaX SET unCampo='Aceptado'"), dbFailOnError
lo que hará el código es actualizar unCampo al valor "Aceptado", pero si durante el proceso se produjera algún error Access desharía toda la operación y volvería al status de inicio sin aplicar ningún cambio en los datos (y, por suerte, no acabarías con media tabla actualizada y la otra media no, je, je...).
Aquí tienes una descripción de las constantes aplicables al método:
https://docs.microsoft.com/es-es/office/client-developer/access/desktop-database-reference/database-execute-method-daoSaludos.