Access, Error actualizar campo con tabla relacionada. Clave de combinación '?'
Tengo un problema que no consigo solucionar; no encuentro la manera de afrontarlo.
Tengo un formulario que se alimenta de una consulta en la que se relacionan dos tablas, tblPrincipal y tblSecundaria, relacionados a Infinitos a Uno, a través de los campos P_Id y S_Id.
TblSecundaria es una tabla que tiene copias selectiva de otra de mucho mayor tamaño y menos manejable (CnsOrigenSecundaria).
En el formulario tengo un combobox que se alimenta de CnsOrigenSecundaria mediante filtros. Cuando selecciono un elemento comprueba si existe en tblSecundaria; si no existe hago un INSERT INTO por codigo VBA. Finalmente, cuando el registro ya existe en tblSecundaria, lo que quiero es darle el valor a P_Id... Y de esta manera traerme los datos de la tblSecundaria a través de la relación.
Lo explicado forma parte de un proceso de inserción de datos, es decir, el usuario debería seguir editando el registro con otros parámetros.
Todo me lo hace bien hasta el momento en el que quiero escribir en el campo P_Id del formulario; en este momento me sale el siguiente mensaje;
¿El campo activo debe coincidir con la clave de combinación '?' en la tabla que sirve como lado 'uno' de la relación uno a varios. Escriba un registro en la tabla del lado 'uno' con el valor de clave deseado y después realice la entrada con la clave de combinación en la tabla del lado 'varios'
He revisado todas las relaciones, que el registro en tblSecundaria esté correctamente introducido, etc... Y nada. De hecho, si introduzco a mano el valor de P_Id que quiero directamente en la consulta (la que alimenta al formulario) me deja y no tengo problema.
También he probado a relacionar el combobox a la CnsOrigenSecundaria (bypaseando el codigo VBA) y me sale el mismo error.
A continuación pongo el codigo VBA en el afterupdate del combobox por si sirviera de ayuda:
Private Sub COMBOBOX_CnsOrigen_AfterUpdate() Dim cboValue As Long 'AÑADIR A tblSecundaria si no existe: cboValue = Nz(Me!CableNoP_CableLibID_Cns, 0) If cboValue > 0 Then If ANEXAR_A_TblSecundaria(cboValue) = False Then MsgBox "Please revise the CableType asignation; there is no match with the internal data base." Me.P_ID = 0 Else 'una vez creado en tblSecundaria, ya puedo llamarlo desde el campo relacionado Me.P_ID = cboValue End If End If End Sub
Public Function ANEXAR_A_TblSecundaria(longID As Long) 'CnsOrigenSecundaria contiene TODOS los tipos de cable Dim strSqltipo As String, booExito As Boolean If longID = 0 Then booExito = False GoTo SALIR_ANEXAR End If booExito = True If DCount("[S_Id]", "tblSecundaria", "S_Id = " & longID & "") = 0 Then If DCount("[S_Id]", "CnsOrigenSecundaria", "S_Id = " & longID & "") > 0 Then strSqltipo = "INSERT INTO tblSecundaria SELECT * FROM CnsOrigenSecundaria WHERE S_Id = " & longID & ";" CurrentDb.Execute strSqltipo, dbFailOnError 'Ejecución de la Consulta de Anexar Datos Else booExito = False End If End If SALIR_ANEXAR: ANEXAR_A_tblSecundaria = booExito End Function
De todas formas, lo dicho, he intentado hacer la relación sobre el campo del combobox, directamente sobre CnsOrigenSecundaria (sin paso por VBA) y sigo teniendo el mismo problema.
Cualquier ayuda sería de agradecer.