Error 3086 en tiempo de ejecución en Access

Quiero pedirle el favor de lo siguiente, que no es precisamente en Visual Basic 6.0, sino en Visual Basic para Access:

Tengo un conjunto de tablas relacionadas en Access en la cual se insertan adecuadamente mediante un formulario, pero necesito eliminar todos los registros dependiendo de un código que un usuario inserte en otro formulario, realizo la siguiente instrucción sql DELETE, con el fin de eliminar los registros:

DELETE DISTINCTROW Acudientes.*, DANE.*, Estudiante.*, Asignación_Cupo.*, Estudiante.[N° de Identificación_estudiante]
FROM DANE INNER JOIN (Asignación_Cupo INNER JOIN (Acudientes INNER JOIN Estudiante ON Acudientes.Número_de_identificación_Acudiente = Estudiante.Número_de_identificación_Acudiente) ON Asignación_Cupo.Id = Estudiante.Id) ON DANE.Formulario_Nº = Estudiante.Formulario_Nº
WHERE (((Estudiante.[N° de Identificación_estudiante])=[Forms]![Formulario_estudiante_a_eliminar]![N_de_Identificación_estudiante]));

Pero al ejecutar la consulta Access me dice en una ventana:

Se ha producido el error 3086 en tiempo de ejecución

No se puede eliminar nada en las tablas especificadas

Dentro de las propiedades de la consulta en vista de diseño la propiedad "Registros únicos " en "Si" como dicen las ayudas para acabar ese error pero me sigue mostrando dicho error.

1 Respuesta

Respuesta
1

Elimina los registros tabla por tabla, no hagas todo en una sola sentencia, sino que haces 1 sentencia por cada tabla teniendo en cuenta las relaciones entre las tablas.

Hola experto muchas gracias con base a lo que usted me dijo estoy haciendo lo siguiente:
realizo en Access tres consultas en donde en cada consulta se eliminan c/u de los registros de una tabla1 con la tabla que esta relacionada, ya que mi sistema tiene 4 tablas relacionadas, cada una de las siguientes consultas son


ConsultasuperDelete1:


DELETE *
FROM Asignación_cupo
WHERE Asignación_cupo.Id=Estudiante.Id And (((Estudiante.[N° deIdentificación_estudiante])=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante));


ConsultaSuperDelete2:


DELETE *
FROM DANE
WHERE DANE.Formulario_Nº=Estudiante.Formulario_Nº And (((Estudiante.[N° deIdentificación_estudiante])=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante));


ConsultaSuperDelete3:


DELETE *
FROM Acudientes
WHEREAcudientes.Número_de_identificación_Acudiente=Estudiante.Número_de_identificación_AcudienteAnd (((Estudiante.[N° deIdentificación_estudiante])=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante));
al ejecutar las tres consultas, mediante un botón con VBA.es decir al realizar esto:
DoCmd.OpenQuery ("ConsultaSuperDelete1")
DoCmd.OpenQuery ("ConsultaSuperDelete2")
DoCmd.OpenQuery ("ConsultaSuperDelete3")


Me pide el valor por ventana de el campo Estudiante.Id y Estudiante.N° de Identificación_estudiante, ahí esta el error no se por que me pide eso si eso ya esta almacenado en las correspondientes tablas.
Gracias por la ayuda.


Att. Hernán Camilo

¿Cuándo eliminas lo haces en un botón? ¿Qué este dentro del formuylario?

porque al hacer esto: Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante

Si ese formulario y esa caja de texto de ese formulario no tienen datos sucede lo que describes.

¿Lo hace para la primera sentencia? ¿O para todas?

También recuerda que si estas tablas tienen relaciones debes eliminar primero la que tiene la relación más interna hacia la relación superior.

Me explico si tienes factura y detalleFactura, debes eliminar primero detallefactura y después Fcatura.

Si, en ese momento el formulario si tiene el registro, no esta vacío.

Hola desafortunadamente intente eliminar por partes desde la relación mas interna y tampoco me dio resultado, me volvió a aparecer el error 3086 en tiempo de ejecución:

"No se pudo eliminar nada en las tablas especificadas"

Gracias.

¿Ese es el mensaje que arroja el error en access?

Si experto ese es el mensaje que arroja.

Prueba abriendo Access como administrador, porque el error indica que no hay permisos para realizar la operacion

Intente abriéndolo como administrador pero el error sigue apareciendo. :(

Yo creo que la sentencia esta mal formada, por ejemplo:

DELETE * FROM Asignación_cupo WHERE Asignación_cupo.Id=Estudiante.Id And (((Estudiante.[N° deIdentificación_estudiante])=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante));

Porque tienes que preguntar :

And (((Estudiante.[N° deIdentificación_estudiante])=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante));

¿Si con el Id del Estudiante ya debe hacer el borrado?

Hola, pregunto And (((Estudiante.[N° deIdentificación_estudiante])=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante)); para que me elimine todos los registros del estudiante cuyo numero de identificación estén en el formulario llamado Formulario_estudiante_a_eliminar y el correspondiente campo llamado N_de_Identificación_estudiante

Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante));

Gracias.

Por eso mismo la sentencia esta mal formada, o yo no la entiendo, preguntas eso en la tabla Asignacion_cupo, DANE y Acudientes, no en la de estudiantes

Hola experto Intente hacer esto pero igual no me sale y eso que estoy aplicando la eliminación de registros por partes.

consultasuperDelete:
DELETE *
FROM Acudientes
WHERE Acudientes.Número_de_identificación_Acudiente = Estudiante.Número_de_identificación_Acudiente AND Estudiante.N°_de_Identificación_estudiante=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante;
consultasuperDelete1:
DELETE *
FROM Asignación_Cupo
WHERE Asignación_Cupo.Id=Estudiante.Id AND Estudiante.N°_de_Identificación_estudiante=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante;
consultasuperDelete2:
DELETE *
FROM DANE
WHERE DANE.Formulario_Nº=Estudiante.Formulario_Nº AND Estudiante.N°_de_Identificación_estudiante=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante;
consultasuperDelete3:
DELETE *
FROM Estudiante
WHERE DANE.Formulario_Nº=Estudiante.Formulario_Nº AND Estudiante.N°_de_Identificación_estudiante=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante;

Gracias!.

"no me sale" = Error, no elimina los registros, ¿Algún mensaje? ¿Estudiante qué es?

Hola experto pues voy a intentar hacer algo, que me dijeron que realizara si lo que deseo realizar no funciona me gustaría contactarme personalmente con usted debido a que tengo otras aplicaciones que deseo distribuir.

Att. Hernán Camilo

[email protected]

Yo lo haría así:

ConsultasuperDelete:
DELETE *
FROM Acudientes
WHERE .N°_de_Identificación_estudiante=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante;

Y Así para las demás sentencias, supongo que el campo N°_de_identificacion_Estudiante esta en esa tabla y en todas las demás.

Gracias experto le agradezco mucho de verdad es así como usted me comentaba, eliminar registros tabla por tabla, el único inconveniente que tengo es que no se me eliminan registros de tan solo una tabla, el resto de los registros de las 3 si me las elimino. sera por que la llave primaria de dicha tabla es de tipo autonumérico?, lo he hecho todo pero no puedo eliminar dicho registros almacenados en tan solo esa tabla.

Gracias.

La tabla Asignación_cupo

No entendí lo que te pasó, cual tabla no es elimino, ¿cuáles si?

En esa tabla haces :

WHERE .N°_de_Identificación_estudiante=Forms!Formulario_estudiante_a_eliminar!N_de_Identificación_estudiante;

¿

?

Si no como lo haces y cual es el mensaje de error

Las tablas en las que se elimino el registro son:

Estudiantes

Acudientes

DANE

y en la única que no se elimino el registro es en una que se llama Asignación_Cupo en donde la llave primaria es un campo llamado Id que es autonumérico dicha tabla Asignación_Cupo tiene una relación de uno a muchos con la tabla estudiantes.

¿Cómo es erelaciona la tabla con estudiantes? ¿Cómo haces al esentencia?

No sale nada, da error

Escribe la sentencia delete que usas para eliminar en esta tabla

De acuerdo mira esta es la sentencia Delete:

DELETE *
FROM Asignación_Cupo
WHERE Id=Forms!Formulario_estudiante_a_eliminar!Id;

El campo Forms!Formulario_estudiante_a_eliminar! Id si aparece o esta bien en el formulario, ¿y si ejecutas la sentencia que error o mensaje aparece?

Hola Experto, pues en vista de que Access no ejecuto la consulta de eliminación Sql DELETE , tuve que realizar un truco:

inserte un campo de texto en el formulario en el cual se asigna el valor del Id con eso la consulta que daría

DELETE Asignación_Cupo.Id, *
FROM Asignación_Cupo
WHERE (((Asignación_Cupo.Id)=[Forms]![Formulario_estudiante_a_eliminar]![Texto274]));

Vale aclarar que el Texto274 queda invisible al ejecutarse el informe

Lastima que Access no dejo eliminar directamente los registros de la tabla, me gustaría saber por que razón no se dejo ejecuta......,me toco valerme del truco que le comento para eliminar los campos de la tabla y gracias a Dios todo funciono.

Agradezco toda la ayuda que usted me presto, aunque bueno seria saber el por que no funciona la sql.

Att. Hernán Camilo.

mi mail es [email protected]

Facebook: http://www.facebook.com/German.Danilo1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas