Comando duplicar registro

He creado una base de datos en Access 2007. Cada registro tiene muchos campos y casi nunca se dan repeticiones de ningún tipo así que no me es útil la creación de combos para elegir características predefinidas para un nuevo registro. Pero por otro lado el día en que entran registros iguales pueden llegar a ser más de treinta, por eso decidí añadir un botón de duplicar registro (de los predefinidos).
El problema es que cuando le doy al botón aparece un formulario nuevo pero en blanco y no hay manera de pegar la información en él. Sé que la información se copia (si después de darle al botón voy a Excel y le doy a Ctrl + V aparece) pero no se pega en el nuevo registro que crea. ¿Cuál puede ser la razón? ¿Me recomiendas que lo haga con VBA? Si es así, he consultado diversas respuestas en éste y otros foros pero no consigo aplicarlas a mi base de datos. ¿Alguna idea?
Más info: el ID es autonumérico y no aparece en el formulario. El formulario está formado por cuatro pestañas de información aunque sería suficiente con duplicar 16 campos (de 42). ¿Algo más?

1 Respuesta

Respuesta
1
Pues existen diferentes opciones para duplicar un registro. Yo supongo que me decantaría (tal como soy) por una complicada...
Para evitar problemas con los tipos de datos, yo acostumbro a usar un doble recordset para estas cosas: uno que contiene la información a copiar y otro destino de la copia
Dim rstOri As DAO.Recordset
Dim rstDes As DAO.Recordset
Set rstOri = CurrentDb.OpenRecordset("SELECT * FROM LaTabla WHERE Id = " & Me!Id)
Set rstDes = CurrentDb.OpenRecordset("SELECT * FROM LaTabla", , dbAppendOnly)
Dim fld As Field
rstDes.AddNew
For Each fld In rstOri.Fields
   rstDes(fld.Name) = rstOri(fld.Name)
Next
rstDes.Update
rstOri.Close
Set rstOri = Nothing
rstDes.Close
Set rstDes = Nothing
Escrito del tiron
Xavi
http://www.aesoft-databases.com
http://www.llodax.com
http://www.mvp-access.com/foro
Gracias por el código pero todavía me surge un problema:
Se ha producido el error '64224' en tiempo de ejecución: Error en el método 'Value' de objeto 'Field2'.
El error está en la linea "rstDes(fld.Name) = resOri(fld.Name)"
No sé si sirve de algo pero ahí va un poco más de información sobre la tabla (se llama CDB): no hay ningún campo multivalor, hay varios campos 'Memo' y uno de 'Datos adjuntos' (que puedo eliminar). El resto es texto, número, fecha (fechas cortas) y sí/no. Hay muchos combos y algunos campos pueden ser automáticos en función de las opciones elegidas en otros.
Por mucho que me lo miro no veo dónde puede estar el error.
Pon un punto de interrupción y evalúa el valor de fld. Name a ver cual es el campo que no le está gustando.
Sigo pidiendo aclaraciones...
He buscado cómo poner un punto de interrupción y lo he encontrado pero no tengo ni idea de cómo evaluar el valor de fld.Name.
Por cierto, si resulta que el error lo da cualquiera de los muchos campos que no puedo eliminar. ¿Qué debo hacer?
¡Gracias por tu tiempo!
Para poner un punto de interrupción debes acceder al código, situarte en la línea dónde quieres que el código se detenga (Set rstOri... es una buena línea) y pulsa F9. La linea quedará resaltada en un color granate.
Ejecuta el código. Cuando se llegue a esa línea, el programa se detendrá en esa linea (ahora resaltada en amarillo).
Ejecuta paso a paso (F8 ejecuta el código línea a línea)
Una vez dentro del For Each, evalúa el valor de fld. Name. Para ello puede seleccionar ese texto y pulsar Mayus+F9, lo que te permite inspeccionar rápidamente el valor de esa expresión. SI deseas ver como cambia para cada registro, clica en Agregar en esa ventanita de inspección. Te aparecerá otra ventana (si no estaba visible) dónde verás las expresiones que estás inspeccionando.
A ver si te sirve
Xavi

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas