Eliminar registro de un subformulario

Tengo un formulario A cuyo origen es una tabla A y que incluye un subformulario B que apunta a una tabla B. Cuando el subformulario B recibe el enfoque genera un nuevo registro en esa tabla B.
Tengo el típico botón de "Cancelar" para que cuando se pulse no se guarden los cambios en el registro de la tabla A. Hasta aquí no hay problema pero sí tengo el problema para eliminar el registro creado en la tabla B.
El botón "Cancelar" está ubicado en el formulario A.
He probado a mover el enfoque al subformulario B y entonces:
DoCmd. RunCommand acCmdSelectRecord
DoCmd. RunCommand acCmdDeleteRecord
... Pero no funciona, el registro en la tabla B sigue ahí.

1 respuesta

Respuesta
2
Si las tablas A y B están bien relacionadas, vete a 'relaciones' une las dos tablas, exige integridad referencial y pones 'eliminar en cascada' o 'registros relacionados', así matas dos pájaros de un tiro y no se te quedan registros B 'huerfanos'.
Muchas gracias por tu rápida respuesta.
Lo que me planteas de la relación entre ambas tablas ya lo tenía configurado de esa manera. Lo que yo necesito no es borrar el registro de la tabla A, sino deshacer los cambios si algún campo se ha modificado del registro de la tabla A y eliminar el registro generado en el subformulario B.
Te pego el evento del botón "Cancelar". Recibo el mensaje de error 2046 - "La acción o comando EliminarRegistro no está disponible ahora"
Gracias otra vez.
Private Sub Cancelar_Click()
Dim Mensaje, Estilo, Titulo, Respuesta
Mensaje = "¿Quieres salir sin guardar los cambios?"
Estilo = vbYesNo + vbInformation + vbDefaultButton1
Titulo = "SALIR"
If (Eval("[Forms]![MODIFICAR CONDICIONES]![RegEmp] Is Null")) Then
DoCmd.RunCommand acCmdUndo
DoCmd.Close
Exit Sub
End If
Respuesta = MsgBox(Mensaje, Estilo, Titulo)
If Respuesta = vbYes Then
DoCmd.RunCommand acCmdUndo
Forms![MODIFICAR CONDICIONES]![CONDICIONES NUEVAS].SetFocus
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.Close
Else: Respuesta = vbNo
Exit Sub
End If
End Sub
Si vas a borrar un registro que previamente has grabado (imagino que con un insert), ¿yo lo haría con un Delete no?.
Hola de nuevo.
Perdona mi ignorancia pero no entiendo lo que me dices.
El subformulario B, cuando recibe el enfoque genera un registro nuevo mediante:
DoCmd.RunCommand acCmdRecordsGoToNew
Lo que yo necesito es que al pulsar el botón "Cancelar" (que está situado en el formulario A) elimine el registro recién generado en el subformulario B.
Gracias nuevamente.
Lo que hace esa instrucción es POSICIONARTE en un registro nuevo, ¿no lo insertará hasta que no le des a grabar o metas algún dato ok?, por tanto, si por código además de posicionarte modificas algo te saldrá un 'lapicero' en la parte izda (selector) que puedes cancelar con la tecla 'Esc', si ya lo has grabado tendrás que hacer un delete.
Bueno volveré a intentar explicarme.
Como te comentaba anteriormente, cuando el subformulario B recibe el enfoque genera un nuevo registro y el usuario puede introducir datos para este nuevo registro del subformulario. Por tanto el nuevo registro ya se ha generado. Precisamente lo que quiero es que el botón "Cancelar" elimine este nuevo registro y para ello utilizo el código que te pegué antes. (DoCmd.RunCommand acCmdDeleteRecord).
No sé si estaré utizando el código correcto pero insisto que el nuevo registro se genera sin problemas. Lo que quiero es eliminarlo en el evento "Cancelar".
Gracias
Repetimos, el código que me has enviado no genera un nuevo registro, sino que se posiciona en uno nuevo, si el usuario no hace nada más no hay nuevo registro. Y a lo mejor tu problema es que quieres borrar un registro que no existe.
Hola de nuevo,
Lo intentaré una vez más a riesgo de repetirme más que una sopa de ajo.
En ningún momento he dicho que el código que he pegado genere un nuevo registro sino que corresponde al código de un botón llamado "Cancelar" y el evento "Al hacer click".
El formulario principal A contiene unos campos A1, A2, A3... etc y un subformulario B con unos campos B1, B2, B3, etc. Además el formulario principal A tiene un botón "Aceptar" y otro botón, el ya famoso "Cancelar".
El formulario A tiene un cuadro combinado que busca un registro de la tabla A (le llamaremos registro A) y muestra los campos A1, A2,... que le corresponden. Además mediante otros eventos (que ahora no vienen al caso) el enfoque se mueve al subformulario B y genero un nuevo registro en la tabla B, (que llamaremos registro B) creando automáticamente unos valores para los campos B1, B2, ... etc. que el usuario puede dejar como están o modificarlos. Hasta aquí todo OK.
Si el usuario "se arrepiente" en algún momento y pulsa el botón "Cancelar", necesito que deshaga los cambios que se hayan producido en los campos A1, A2,... dejando el registro A como estaba (hasta aquí no tengo problema) y también que elimine el registro B que se generó anteriormente. Y ahí es donde tengo el problema, porque no consigo eliminar ese registro B. ¿Qué código debo utilizar?
Siento haberme extendido tanto pero tenía la impresión de que no entendías exactamente cual era mi problema.
Gracias una vez más.
Si pero no, no pero si, si el registro está creado, ¿imagino qué sabrás lla clave que tiene no? , pues coniiiio haz un delete y ya está.
docmd.runsql("delete from b where claveB='" & loqueseatusabras & "'")
Y punto pelota.
Entiendo tu "altruismo" poniéndote a responder aquí las dudas de los demás pero ten en cuenta que en ocasiones las personas que reciben las respuestas ni saben lo mismo que tú ni entienden el lenguaje que utilizas.
Gracias por tu interés y rapidez en las respuestas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas