ACCESS - Problema con la clave primaria automática al agregar una tabla/consulta

ALESS -  
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   -
Hola,

Estoy descubriendo Access desde ayer y realmente no estoy acostumbrada.
Tengo varias tablas idénticas provenientes de diferentes fuentes. Se ha generado una clave primaria mediante un número de ID automático para cada una de ellas, así que, por supuesto, encontramos varias veces la misma clave primaria cuando intentamos fusionarlas. Hay un SGBD, pero ninguna de estas tablas tiene un vínculo basado en esta clave primaria. Para poder agregar todas estas tablas, primero creé una consulta de unión, luego una consulta de inserción. Ahí es donde se bloquea la situación.
Incluso cuando quito la clave primaria del campo, o incluso cuando elimino todos los campos ID, no puedo agregar los resultados de mi consulta a mi tabla por razones de violación de clave (a pesar de los intentos de guardado).
¿No hay una manera simple de agregar estos datos, ya sea generando automáticamente un número único y automático para los registros añadidos, o forzando la posibilidad de duplicados, aunque sea para reiniciar todo al final, ya que la clave primaria no se utiliza para ninguna relación?
En este momento estoy exportando mi consulta a Excel, llenando con un número de incremento que comienza desde el número siguiente al de mi tabla de origen, y francamente es ultra tedioso.

¡Muchas gracias por tu ayuda! ¡Soy un desastre y no se supone que lo sea!

Configuración: Windows / Edge 101.0.1210.53

7 respuestas

  1. jee pee Mensajes publicados 31875 Fecha de registro   Estado Moderador Última intervención   9 977
     
    Hola,

    No practico Access en absoluto, es solo una sugerencia sobre el principio.

    Si tus tablas a fusionar son del tipo (id, campo1, campo2, ...), vas a crear una nueva tabla con los mismos campos pero debes indicar que el id es de tipo autoincremental, así que el sistema lo inserta y lo genera. Y después llenas esta tabla especificando los campos, excepto id, con
    insert tfusion (campo1, campo2) select campo1, campo2 from t1 union select campo1, campo2 from t2 union ...

    O como no necesitas el id, puedes crear una tabla sin clave (campo1, campo2) y llenarla con la misma consulta.

    0
  2. blackmefias_3350 Mensajes publicados 711 Fecha de registro   Estado Miembro Última intervención   69
     
    Hola,

    aquí está en orden lo que debes hacer:

    1) creación de las tablas
    por ejemplo, para una base de gestión de inventarios he creado una tabla y la he guardado directamente con el nombre: T_Categories



    aquí los parámetros del campo ID_Categories

    Por favor, nota que aquí evito poner acentos tanto en el nombre de mis tablas como en los nombres de los campos, esto se hace intencionadamente para una mejor interpretación de la fuente, con o sin serifas.

    una vez que mi primera tabla está creada, voy a cambiar el campo NomCategorie para que se convierta en un campo de lista desplegable.

    para eso selecciono el campo aquí marcado en amarillo


    y en los parámetros del campo, voy a la pestaña lista de opciones y despliego la lista como aquí


    Luego, siempre en los parámetros del campo, en las propiedades de la lista desplegable,

    voy a la propiedad "Origen de la fuente", cambio a "lista de valores" en "contenido" y en la celda de la derecha ingreso mis datos de la lista, ten en cuenta que estos deben estar separados por ; (punto y coma):

    en esta tabla, por fin puedo poner o agregar datos, por ejemplo en el campo descripción.

    luego creo mi segunda tabla y la guardo directamente con el nombre T_objets


    vuelvo a modo de datos y agrego algunos datos



    2) crear relaciones entre estas tablas Atención, no confundas las relaciones con las consultas, no tienen el mismo rol

    para crear una relación entre dos tablas, necesitas tener dos tablas, pero sobre todo, una de las dos tablas debe contener un campo adicional que se agrega al final de la tabla, también debe ser que el tipo de datos tenga el mismo valor, por ejemplo, no puedo poner texto en una relación de tabla con datos numéricos (números)

    Por favor, nota que en mi tabla T_Objets he agregado un campo "ID_categories" cuyo tipo de datos es "Numérico", puedes agregarlo directamente en tu tabla en modo creación o desde la herramienta de relaciones, solo necesitarás seleccionar una tabla (aquí T_objet), hacer clic derecho y elegir modo creación.


    para hacer una relación tus tablas deben parecer así:

    Aquí, la relación entre las dos tablas indica que una categoría puede contener al menos 1 a varios objetos

    MLD = Modelo Lógico de Datos

    MCD = Modelo Conceptual de Datos

    ver: Método merise

    hago la relación entre el campo ID_Categories de la tabla T_Categories y el campo ID_categories de la tabla T_Objets

    salgo y guardo la relación

    y regreso a la tabla T_Categories que abro en modo "hoja de datos"

    en mi ejemplo, hay tres categorías GrosElectro, PetitsElectro y Meubles

    en la tabla T_objets, mi primer objeto es una mesa de comedor, por lo que se encuentra en la categoría Meubles

    para la tabla T_categories, he decidido que GrosElectro está en el primer registro del campo ID_Catégories, como este es un campo indexado y autoincremental, recibirá como ID 1, PetitElectro tendrá 2 en el campo ID y Meubles tendrá 3 en el campo ID de la tabla T_Categories.

    espero que mi explicación sea clara para ti, ya que no es fácil de definir

    así que regreso a mi tabla T_Categories y puedo ver una pequeña casilla con un + si hago clic en ella, abro la tabla T_Objets y puedo ver así por línea todos los objetos que se encuentran en la categoría Meubles, por ejemplo



    Por favor, nota que he hecho clic en el + de la tercera línea de tu tabla T_Categories y así puedo ver los datos que se relacionan con el ID 3 cuya valor es: Meubles.

    3) crear una o más consultas (las consultas permiten hacer búsquedas, ordenamientos en las tablas)

    4) crear el o los formularios y ver subformularios

    sin embargo, si importas tablas, al elegir crear una clave primaria, te sugiero que elijas tú mismo el campo ID porque si lo haces automáticamente, se añadirá el campo ID a tu tabla que puede que ya tenga uno.

    0
  3. ALESS
     
    @jee pee:
    Muchas gracias por tu respuesta, efectivamente intenté hacerlo sin el ID pero se niega si el número y los campos no son estrictamente idénticos :(

    @blackmefias:
    Muchas gracias por tu respuesta, justamente ese es el problema: no puedo partir de una nueva tabla y recrear todo. Hay una base de Access con todas las tablas, todas las relaciones y IDs en número automático y clave primaria, cuyo estatus no consigo modificar (con duplicados, eliminación de la clave). De hecho, la empresa para la que acabo de comenzar este nuevo trabajo ha duplicado simplemente una base de Access con un montón de tablas, un montón de relaciones, un montón de reglas de integridad, y necesitaría compilar todo. Muchas gracias de todos modos por el cuidado prestado a la descripción, ¡me va a ser muy útil para lo que sigue y para mi aprendizaje de Access!
    0
    1. blackmefias_3350 Mensajes publicados 711 Fecha de registro   Estado Miembro Última intervención   69
       
      para comenzar bien con Access, te sugiero que visites este sitio grenier.self-access.com
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      Sería útil que dieras detalles sobre los campos de tus tablas.
      ¿Qué mensaje de error recibes?
      0
  4. ALESS
     
    @yg_be ¡Hola!
    Tengo varias bases de datos de Access con la misma estructura (tablas, formularios, consultas, relaciones). El problema es que hay tablas que fusionar que tienen claves primarias en número auto y claves secundarias. Las operaciones realizadas:
    1. Apertura de una de las bases
    2. Importación de todas las otras tablas de las otras bases
    3. Unión de las tablas importadas con estructura idéntica (a veces fallaba debido a un campo faltante, corregido)
    4. Adición de esta unión a la tabla "de acogida" ya presente, para cada una de las tablas = GRAN FALLA por culpa del número auto
    5. Retiro de la clave primaria de la consulta y luego adición = FALLA
    Retiro del campo ID por completo y luego adición = FALLA
    Intento de modificación del campo ID de "acogida" - retiro de la clave primaria y/o eliminación del campo ID (dado que este campo además no se utiliza en NINGUNA relación, aparentemente)
    FALLA FALLA FALLA
    6. Exportación a Excel de las consultas, incrementación manual del ID, importación en base y luego adición a la tabla OK, en varias tablas 2 con solo un registro que presenta problema, y por otro lado una tabla bien KO con 964 registros en FALLA sobre 3297.
    7. Imposible abrir uno de los formularios, el parámetro de la propiedad CamposPares es la causa del siguiente error: ocurrió un problema durante la comunicación entre Microsoft Access y el servidor OLE o el control ActiveX.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      No das ninguna información sobre la estructura de tus tablas, la fuente SQL de tus consultas ni sobre los mensajes de error.
      0
  5. ALESS
     
    las estructuras de las tablas son idénticas, lo que importa es que todas tienen un ID autoincremental, lo demás va bien
    Para las consultas es un UNION, y luego un INSERT INTO
    Los mensajes de error "XXX registros no pudieron ser añadidos debido a violación de clave"

    Ahí he logrado integrar todos menos la última tabla donde encuentro muchos registros rechazados

    y el último problema que no puedo resolver es la apertura del formulario "El parámetro de la propiedad CamposPares está en la origen del siguiente error: se produjo un problema durante la comunicación entre Microsoft Access y el servidor OLE o el control ActiveX" => "la expresión al abrir introducida como parámetro de la propiedad del evento es la causa de un error"
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      No das ninguna información sobre la fuente SQL de tus consultas.
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      Si tu recibes un error de "violación de clave" en tu consulta INSERT, es porque no has definido tu tabla de destino como explicas "Eliminación de la clave primaria de la consulta", o bien porque tienes otra clave única en esa tabla.
      0
  6. Aless
     
    Lo siento, no entiendo. Hago simples adiciones y uniones en las tablas que he importado previamente en mi base, un simple insert into y una unión.
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       
      visualiza tus consultas en modo "SQL", luego comparte aquí el texto mostrado.
      0