Eliminación de datos en una tabla de Access
celine barriant
-
nabil -
nabil -
Bonjour,
He creado una base de datos en Access que contiene varias tablas. Mi problema es que no preveía un medio para eliminar los datos en los campos de las diferentes tablas. Para remediar esto, quisiera crear un botón de eliminación.
Este botón también debería poder eliminar los datos relacionados en las otras tablas.
Por favor, dígame cómo hacerlo porque estoy bloqueada.
Céline Barriant
He creado una base de datos en Access que contiene varias tablas. Mi problema es que no preveía un medio para eliminar los datos en los campos de las diferentes tablas. Para remediar esto, quisiera crear un botón de eliminación.
Este botón también debería poder eliminar los datos relacionados en las otras tablas.
Por favor, dígame cómo hacerlo porque estoy bloqueada.
Céline Barriant
11 respuestas
Hola,
Para resolver tu problema tienes dos posibilidades:
1) A través del diagrama de relaciones, especificarás, para cada relación, que la integridad referencial debe ser preservada. Esto significa que si eliminas un registro en una tabla "madre", todos los elementos correspondientes en las tablas "hijas" también serán eliminados. Para hacer esto, haz doble clic en el enlace (hay que apuntar bien).
2) Codificas en VBA lo que debe hacer tu botón.
Ejemplo:
No hay nada más peligroso que una idea cuando tienes
solo una idea :-)
Para resolver tu problema tienes dos posibilidades:
1) A través del diagrama de relaciones, especificarás, para cada relación, que la integridad referencial debe ser preservada. Esto significa que si eliminas un registro en una tabla "madre", todos los elementos correspondientes en las tablas "hijas" también serán eliminados. Para hacer esto, haz doble clic en el enlace (hay que apuntar bien).
2) Codificas en VBA lo que debe hacer tu botón.
Ejemplo:
Private Sub Ton_Bouton_Click() Dim i As Long Dim mDb As Database Dim mRs, mRsFiltred As Recordset Set mDb = CurrentDb Set mRs = mDb.Openrecordset("Nombre_Tabla", dbOpenDynaset, dbSeeChanges, dbPessimistic) mRs.Filter = "Criterio para los registros a eliminar" Set mRsFiltred = mRs.Openrecordset mRsFiltred.MoveLast For i = 1 To mRsFiltred.RecordCount mRsFiltred.AbsolutePosition = i mRsFiltred.Edit mRsFiltred.Delete mRsFiltred.Update Next i End Sub No hay nada más peligroso que una idea cuando tienes
solo una idea :-)
cuando creas tu botón, debes tener el asistente que te proponga diferentes tipos de acciones. Elige eliminar el registro.
A continuación, en la herramienta de relación, debes poder decir que cuando se elimina en la tabla principal, se eliminan en cascada los campos de la otra tabla.
Disculpa si esto es incorrecto o impreciso, te lo digo de memoria, no tengo acceso instalado en este puesto.
Espero no haberme equivocado y haberte ayudado.
Hasta pronto
;-)
~ ~ Fada ~ ~ : Miembro de Star!alco
A continuación, en la herramienta de relación, debes poder decir que cuando se elimina en la tabla principal, se eliminan en cascada los campos de la otra tabla.
Disculpa si esto es incorrecto o impreciso, te lo digo de memoria, no tengo acceso instalado en este puesto.
Espero no haberme equivocado y haberte ayudado.
Hasta pronto
;-)
~ ~ Fada ~ ~ : Miembro de Star!alco
Aquí está la traducción:
Aquí está la primera solución, ya había aplicado la integridad referencial a mis relaciones y cuando creo un botón de eliminación con el asistente, me aparece este mensaje de error:
Imposible eliminar o modificar el registro porque la tabla "ETABLISSEMENT" incluye registros relacionados
Para la segunda solución, me dice "error de compilación: miembro de método o de datos no encontrado" ni siquiera sé lo que eso puede significar...
Imposible eliminar o modificar el registro porque la tabla "ETABLISSEMENT" incluye registros relacionados
Para la segunda solución, me dice "error de compilación: miembro de método o de datos no encontrado" ni siquiera sé lo que eso puede significar...
Creo que voy a utilizar la solución un poco brusca que quería evitar. Para la eliminación, no es importante actualizar en cascada, sino borrar en cascada.
Sé que esta funcionalidad es delicada de usar porque a veces conlleva consecuencias imprevistas y no recuerdo cuáles son.
Y otra pregunta, ¿cuál es la diferencia entre eliminar un dato en un campo y anular un dato en un campo?
Gracias
Sé que esta funcionalidad es delicada de usar porque a veces conlleva consecuencias imprevistas y no recuerdo cuáles son.
Y otra pregunta, ¿cuál es la diferencia entre eliminar un dato en un campo y anular un dato en un campo?
Gracias
El primer problema está relacionado con la integridad referencial....
El botón de eliminación se niega a funcionar porque, al parecer, no puede eliminar los registros en las tablas relacionadas.
Por lo tanto, necesitas programar en VBA todas las eliminaciones.
Debes proceder por etapas:
1) Determinas la lista de tablas que deben ser limpiadas cuando eliminas un campo de la tabla ESTABLECIMIENTO
2) Creas un botón en tu formulario (el que has creado está muy bien, pero tendrás que modificar el código VBA que está vinculado).
Para poder ayudarte (VBA), necesito más información.
- ¿La tabla ESTABLECIMIENTO está vinculada a cuáles otras tablas?
- ¿A través de qué campos?
Nada es más peligroso que una idea cuando solo se tiene una idea :-)
El botón de eliminación se niega a funcionar porque, al parecer, no puede eliminar los registros en las tablas relacionadas.
Por lo tanto, necesitas programar en VBA todas las eliminaciones.
Debes proceder por etapas:
1) Determinas la lista de tablas que deben ser limpiadas cuando eliminas un campo de la tabla ESTABLECIMIENTO
2) Creas un botón en tu formulario (el que has creado está muy bien, pero tendrás que modificar el código VBA que está vinculado).
Para poder ayudarte (VBA), necesito más información.
- ¿La tabla ESTABLECIMIENTO está vinculada a cuáles otras tablas?
- ¿A través de qué campos?
Nada es más peligroso que una idea cuando solo se tiene una idea :-)
De hecho, mi botón de eliminación no funcionaba porque había la integridad referencial, pero al activar el botón "eliminar en cascada" funciona.
Para responder a tu pregunta, la tabla principal de mi base de datos es "salarié". Hay 4 tablas relacionadas con esta primera: "etablissement", "remunération", "départ" y "emploi".
La tabla "salarié" tiene como clave primaria "num_salarie" y, por lo tanto, este campo es una clave foránea en mis otras tablas. Cada una de mis tablas tiene un número automático como clave primaria.
El problema con la eliminación en cascada es que tengo miedo de que si elimino un empleado Dupont de la tabla "salarié" que era operador de industria, el botón de eliminación en la tabla "emploi" elimine a todos los operadores de industria.
¿Podrías aclararme, gracias, me ayuda mucho?
Para responder a tu pregunta, la tabla principal de mi base de datos es "salarié". Hay 4 tablas relacionadas con esta primera: "etablissement", "remunération", "départ" y "emploi".
La tabla "salarié" tiene como clave primaria "num_salarie" y, por lo tanto, este campo es una clave foránea en mis otras tablas. Cada una de mis tablas tiene un número automático como clave primaria.
El problema con la eliminación en cascada es que tengo miedo de que si elimino un empleado Dupont de la tabla "salarié" que era operador de industria, el botón de eliminación en la tabla "emploi" elimine a todos los operadores de industria.
¿Podrías aclararme, gracias, me ayuda mucho?
El botón solo eliminará de la tabla empleo los registros para los cuales la clave primaria de tu tabla "salarié" es idéntica. Nada más.
No hay nada más peligroso que una idea cuando solo se tiene una idea :-)
No hay nada más peligroso que una idea cuando solo se tiene una idea :-)
Hola,
Efectivamente, si tienes una relación entre dos tablas y marcas 'eliminación en cascada', significa que por cada registro eliminado, se eliminarán los registros relacionados en la otra tabla. Para cambiar el problema, puedes mantener la vinculación, pero desmarcar 'Aplicar la integridad referencial'.
¡Hasta luego!
Efectivamente, si tienes una relación entre dos tablas y marcas 'eliminación en cascada', significa que por cada registro eliminado, se eliminarán los registros relacionados en la otra tabla. Para cambiar el problema, puedes mantener la vinculación, pero desmarcar 'Aplicar la integridad referencial'.
¡Hasta luego!