Cómo duplicar un registro completo añadiendo clave principal nueva en Access 2007

Tengo una base de datos con diferentes tablas. Los datos los introduzco utilizando formularios con subformularios relacionados mediante una clave principal común en todas las tablas. Lo que quisiera hacer es poder duplicar un registro completo de todas las tablas indicando una clave principal nueva que se aplique al nuevo registro en todas las tablas. ¿Se puede realizar esto o tendría que realizar el duplicado manualmente en todos los subformularios relacionados?

2 respuestas

Respuesta
1

Vamos a ver si me explico. En principio no tienes problema siempre y cuando las tablas destino tengan un campo para poder poner el Idcliente. Si tu tienes un formulario Clientes dependiente de la tabla Clientes, y rellenas un registro y quieres que lo inserte en la Tabla( por ejemplo) Personas:

Supongamos que la tabla Clientes, y por ende el formulario tiene los campos Idcliente(Autonumérico y clave), Cliente, Dirección, NIF, etc., y que la tabla Personas tenga IDPersona que sea numérico, no clave

1º Suponiendo que la tabla Personas tiene los mismos campos que Clientes( o sea, que se llamen igual)

Docmd.runsql"insert into Personas select * from Clientes where idcliente=forms!clientes!idcliente")

2º Suponiendo que los campos de la tabla Personas tengan distinto nombre

docmd.runsql"insert into Personas(idPersona,Nombre, Ocupación) values ('" & [idcliente] & "','" & [Cliente] & "', '" & [trabajo] & "')"

Vamos con los índices. Si la tabla Personas tuviera un índice Autonumérico y clave, lo mejor sería que lo dejaras como está y le añadieras un campo Idcliente numérico, ya que te serviría para relacionarlo con el idcliente de la tabla Clientes.

En fin hay muchas posibilidades. Casi lo mejor es que pongas la imagen de las relaciones y se podrá opinar mejor.

¡Gracias! La idea es buena, pero no es lo que yo busco. Este proceso sirve para copiar los datos de una tabla a otra, pero yo lo que necesito es duplicar los datos de todos los campos en una misma tabla, cambiando solamente la clave principal, que se la doy yo.

De todos modos, muchas gracias por su tiempo.

Saludos,

Ainhoa

Ahora esta claro.

Supongamos que la tabla se llama Clientes con los campos Cliente, Fecha y Precio.

En el formulario crea un botón de comando y en sus Propiedades-Eventos-Al hacer clic, crea un procedimiento de evento y escribe

DoCmd.RunSQL "insert into clientes select cliente, fecha, precio from clientes"

Si no quieres usar formulario puedes crear con Clientes una consulta de datos anexados y elegir como tabla destino la propia Clientes. Cada vez que hagas doble clic sobreel nombre de la consulta se ejecutará y te anexará todos los registros.

Me olvidaba, si quisieras poner el índice desde el formulario después de el código de antes podrías poner:

docmd.runsql"update Clientes set idloquesea=......"

Por ejemplo supongamos que en el formulario tienes un cuadro de texto Índice donde está, o vas a escribirlo. Podrías poner

Docmd.runsql"update clientes set idclientes=forms!nombredelformulario!indice where idclientes is null"

Así cuando pulses el botón, a todos aquellos registro de la tabla Clientes que no tengan valor en IdClientes, le pondrá el número(o lo que sea) que figura en el cuadro de texto Índice.

¡Gracias! En cuanto lo pruebe te confirmo si me funciona, pero creo que esto sí me puede servir.

Saludos,

Ainhoa

Hola de nuevo, he probado tu sugerencia, pero no me funciona tampoco. Lo que yo necesito es poder seleccionar un registro de un subformulario y duplicar los campos de ese registro en concreto cambiando la clave principal para que no dé error de clave duplicada. No sé si esto es factible. Puede que quiera automatizar demasiado mi base de datos.

Si se te ocurre algo, te lo agradecería.

Gracias de nuevo.

Saludos,

Ainhoa

Ya nos vamos acercando.

Vamos a suponer que tienes una tabla Ventas, con IdVenta(Autonumérico y clave), Cliente, FechaVenta, etc.

Supongamos que tienes una tabla DetalleVenta, con IdVenta(numérico y relacionado con el IDVenta de la tabla Ventas Uno a Varios), Prtoducto, precio, cantidad,...

Me parece entender que quieres que al seleccionar algún registro en particular del subformulario DetalleVenta, te lo inserte en la tabla DetalleVenta.

Entonces en el subformulario, que supongo que será tabular, a la derecha de Cantidad crea un botón de comando y en sus propiedades-eventos-al hcer clic, crea un procedimiento de evento y escribe

DoCmd. RunSQL "insert into detalleventa(producto, precio, cantidad)values(forms!ventas!detalleventa.form!producto, forms!ventas!detalleventa.form!precio, forms!ventas!detalleventa.form!cantidad)"

Si miras en la tabla Detalleventa verás que te ha añadido un registro igual al que hay donde has pulsado. Pero el problema que le veo, y podrás comprobar es que en ese registro el IdVenta está vacío, por eso te decía lo de docmd.runsql"update...

Para darle algún número.

¡Gracias! He probado esta forma, pero tampoco me sirve, porque todas las tablas tienen un campo definido como clave principal y me da error al intentar duplicar el registro.

He conseguido duplicar el registro seleccionado desde el formulario creando una consulta de datos anexados, pero no consigo que se actualice el registro mostrado al duplicado. Duplica el registro, pero no sé cómo actualizar el filtro del formulario para que muestre el registro recién creado. ¿tienes alguna idea de cómo poder hacerlo?

Saludos,

Ainhoa

Respuesta
1

Ainhoa: Este enlace que te cito corresponde a un ejemplo de Neckkito, que creo te servirá.

http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/todos/93-ejemplos-explicados/ejemplos-de-formularios/190-duplicar-registros-secuencialmente 

Mis saludos >> Jacinto

¡Gracias! El ejemplo es muy bueno pero lamentablemente no me sirve porque yo no quiero un autonumérico, sino que registre la clave principal según un valor que yo le voy a indicar y todos los demás campos sean exactamente iguales en todas las tablas relacionadas entre sí. La cuestión es que tenemos muchos casos de piezas simétricas, por lo que necesitaría generar un proceso de duplicado de todos los datos, cambiando tan sólo la clave principal.

No obstante, muchas gracias por su tiempo.

Saludos,

Ainhoa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas