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.

Respuesta
2

Si tuviera que "apostar" por el origen del problema, diría que es porque los datos recién introducidos en la tabla por medio de la SQL no se reflejan en la consulta de origen al formulario, al tenerla ya abierta.

Yo intentaría hacer un refresh o un requery (por decir en algún lado al final del código del evento "después de actualizar" del combo), a ver si así solucionas el problema. Si el requery te funciona, igual tienes que añadir una linea adicional para ir al último registro.

Un saludo.


Estuve indagando en la red y este error le había sucedido repentinamente al personal y de momento parece que nadie sabe razón... Pero uno de los foros daba la solución con un me.refresh y efectivamente se soluciona tal y como apuntas... Para poder seguir introduciendo datos simplemente, después del refresh, hago un setfocus al combobox.

Muchas gracias por la ayuda y el interés.

Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas