Tengo una consulta de eliminación creada con dos tablas relacionadas entre
sí por el campo "COD"... En ninguna de las dos tablas tengo un campo único,
puesto que los registros pueden estar duplicados en una y en otra, por lo que
dicha relación es de varios a varios...
Lo que pretendo es eliminar los registros de la tabla 1 que tengan registros
en la tabla 2... Pero cuando ejecuto la consulta me dice: "No se puede
eliminar nada en las tablas especificadas" a pesar de que he puesto en
"donde" que el código de la tabla 1 coincida con el código de la tabla 2...
¿¿Cómo puedo solucionarlo??...
Gracias por anticipado...
Salu2
---
José Mª Fueyo
[MS MVP Access]
DELETE Tabla1.*, Tabla1.COD
FROM Tabla1
WHERE (((Tabla1.COD) In (select distinct COD from Tabla2)));
Probaré lo que me dices, pero de la Tabla1 quiero borrar los que coinciden
en base a 3 campos coincidentes que tienen las dos tablas... Es decir, que
según lo tenía puesto en la consulta en el "donde" ponía los campos de la
tabla2 para que coincidiesen con los de la tabla1... Los registros que tenía
que eliminar me aparecían correctamente pero luego me daba el error que he
comentado...
Probaré con lo que me has dicho, José María... Gracias...
"José Mª Fueyo" wrote:
> .
>
Pero ahora tengo otro problema con este mismo asunto... He probado a hacer
lo mismo con otra consulta de este tipo en el que están relacionadas una
tabla con una consulta... En este caso la tabla en cuestión tiene más de un
millón de registros, por lo que al realizar la instrucción SQL el tiempo de
espera se demora en muchos minutos...
Mi pregunta es si puedo eliminar registros de una consulta, llamemosla
"ConsultaA" por medio de código... Es decir, sobre la consulta que tengo
montada (unión de la tabla y la consulta) que por medio de código fuera
leyendo los registros de dicha consulta y fuera eliminando los registros de
la tabla...
¿¿Es posible y más rápido por código??... ¿¿Cómo sería el código??...
Gracias de nuevo...
Si quieres usar código, tendrás que usar un objeto Recordset que use la
consulta, recorrer sus registros, y para cada registro, ejecutar una
consulta de eliminación sobre la tabla o abrir otro objeto Recordset sobre
la tabla y eliminar todos los registros relacionados.
Ejemplos sobre usar objetos Recordset tienes en la ayuda de VBA y en este
mismo grupo.
Pero lo dicho: te va a costar más o menos el mismo tiempo si usas código que
si usas una consulta. Eso sí, verifica que tienes bien indexada la tabla
donde quieres eliminar los registros, y las tablas que usas en la consulta.
Unos buenos índices harán que se ejecute algo más rápida la consulta de
eliminación.
--
Un saludo,
Patxi Sanz
Tudela (NA)
¿¿Cuando te refieres a unos buenos índices quieres decir, por ejemplo un ID
autonumérico??...
¿¿Algún consejo para poder realizar la operación que quiero en menos
tiempo??...
Gracias de nuevo...
"Patxi Sanz" wrote:
> .
>
- http://office.microsoft.com/es-es/access/HA102103473082.aspx
- http://www.aulaclic.es/access2002/a_5_1_3.htm
El consejo es el mismo: los campos con los que relaciones la tabla y la
consulta, mejor si están indexados. Y un millón de registros va a demorar en
su ejecución.