ACC: Cómo duplicar formulario principal y sus registros de detalle de subformulario

Seleccione idioma Seleccione idioma
Id. de artículo: 132032 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Moderada: Requiere macro básico, codificación y las capacidades de interoperabilidad.

El Asistente para botones de comando proporciona un botón de comando registros duplicados que se puede utilizar para duplicar el registro actual; sin embargo, este botón de comando no duplica ningún detalle de los registros asociados con ese registro que puede aparecer en un subformulario.

Este artículo describe cómo automatizar la duplicación de un registro de formulario principal y sus registros de detalle asociado del subformulario. El artículo muestra cómo agregar un botón de comando al formulario pedidos de la base de datos de ejemplo Neptuno.mdb (o Neptuno.mdb en la versión 2.0) que duplica el pedido actual en un pedido nuevo. El artículo a continuación, muestra cómo utilizar el nuevo botón de comando.

Más información

A fin de duplicar un registro de formulario principal y sus registros de detalle asociado subformulario, el proceso siguiente debe ser automatizado:
  1. Se debe duplicar el formulario principal.
  2. Valores de campo de clave única, principal deben tener solicitados y establecidos en el registro del formulario principal duplicada. Si la clave principal es un campo de contador, esto no es necesario.
  3. Debe guardar el formulario principal duplicado.
  4. Debe ejecutarse una consulta de datos anexados que selecciona registros de detalle con valor de clave principal del registro de formulario principal de origen y agrega estos registros volver a la tabla detalle mediante el principal valor de clave del registro del formulario principal duplicada.
Es importante que se guarda el registro del formulario principal para que los registros de detalle se duplican con la consulta de datos anexados tienen un registro de formulario principal para que se asociará. Esto evita problemas de integridad referencial.

Para duplicar un registro de formulario principal y sus registros de detalle asociado subformulario, siga estos pasos.

Advertencia: Seguir los pasos descritos en este ejemplo modificará la base de datos de ejemplo Neptuno.mdb (o Neptuno.mdb en la versión 2.0). Puede que desee hacer copia de seguridad del archivo Neptuno.mdb o realizar estos pasos en una copia de la base de datos Northwind.
  1. Abra la base de datos de ejemplo Neptuno.mdb y abra el formulario Pedidos en la vista Diseño.
  2. Agregue un nuevo botón de comando y establezca las propiedades del botón de comando como sigue:
          Name: btnDuplicate
          Caption: Duplicate
          OnClick: [Event Procedure]
    						
  3. Haga clic en el botón Generar para el derecho de OnClick del botón de comando propiedad y escriba el siguiente procedimiento.

    En Microsoft Access versión 7.0 y Microsoft Access 97:
            Private Sub btnDuplicate_Click ()
            Dim dbs As Database, Rst As Recordset
            Dim F As Form
    
            ' Return Database variable pointing to current database.
            Set dbs = CurrentDb
            Set Rst = Me.RecordsetClone
    
            On Error GoTo Err_btnDuplicate_Click
    
            ' Tag property to be used later by the append query.
            Me.Tag = Me![OrderID]
    
            ' Add new record to end of Recordset object.
            With Rst
               .AddNew
                  !CustomerID = Me!CustomerID
                  !EmployeeID = Me!EmployeeID
                  !OrderDate = Me!OrderDate
                  !RequiredDate = Me!RequiredDate
                  !ShippedDate = Me!ShippedDate
                  !ShipVia = Me!ShipVia
                  !Freight = Me!Freight
                  !ShipName = Me!ShipName
                  !ShipAddress = Me!ShipAddress
                  !ShipCity = Me!ShipCity
                  !ShipRegion = Me!ShipRegion
                  !ShipPostalCode = Me!ShipPostalCode
                  !ShipCountry = Me!ShipCountry
               .Update                     ' Save changes.
               .Move 0, .LastModified
            End With
            Me.Bookmark = Rst.Bookmark
    
            ' Run the Duplicate Order Details append query which selects all
            ' detail records that have the OrderID stored in the form's
            ' Tag property and appends them back to the detail table with
            ' the OrderID of the duplicated main form record.
    
            DoCmd.SetWarnings False
            DoCmd.OpenQuery "Duplicate Order Details"
            DoCmd.SetWarnings True
    
            'Requery the subform to display the newly appended records.
            Me![Orders Subform].Requery
    
            Exit_btnduplicate_Click:
            Exit Sub
    
            Err_btnDuplicate_Click:
            MsgBox Error$
            Resume Exit_btnduplicate_Click:
            End Sub
    						

    En Microsoft Access versión 2.0:

    Nota: En el siguiente ejemplo de código, un subrayado (_) al final de una línea se utiliza como un carácter de continuación de línea. Quite el carácter de subrayado del final de la línea cuando escriba este código.
            Sub btnDuplicate_Click ()
               Dim Msg As String
               Dim NewOrderID As Variant
               Dim Criteria As String
    
               ' Trap any unexpected error that may occur.
               On Error GoTo Err_btnDuplicate_Click
    
               ' Prompt for a unique Order ID number.
               While NewOrderID = ""
                  Msg = "Enter a unique Order ID for the duplicated record"
                  NewOrderID = InputBox(Msg)
    
                  ' If the user pressed Cancel, then exit sub.
                  If NewOrderID = "" Then Exit Sub
    
                  ' Make sure the number has not been used yet.
                  Criteria = "[Order ID]=" & NewOrderID
                  If Not IsNull(DLookup("[Order ID]", "Orders", Criteria)) Then
                     MsgBox "The specified Order ID already exists!"
                     NewOrderID = ""
                  End If
               Wend
    
               ' Record the current Order ID (primary key value) into the
               ' form's Tag property to be used latter by the append query.
               Me.Tag = Me![Order ID]
    
               ' Duplicate the current main form record:
               '    Select Record, Copy Record, Paste Append Record.
    
               DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, _
                  A_SELECTRECORD_V2, , A_MENU_VER20
               DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, A_COPY, , A_MENU_VER20
               DoCmd DoMenuItem A_FORMBAR, A_EDITMENU, 6, , A_MENU_VER20
    
               ' Insert the new Order ID into the duplicated main form record.
               Me![Order ID] = NewOrderID
    
               ' Save the duplicated main form record.
               DoCmd DoMenuItem A_FORMBAR, A_FILE, A_SAVERECORD, , A_MENU_VER20
    
               ' Run the Duplicate Order Details append query which selects all
               ' detail records that have the Order ID stored in the form's
               ' Tag property and appends them back to the detail table with
               ' the Order ID of the duplicated main form record.
               DoCmd SetWarnings False
               DoCmd OpenQuery "Duplicate Order Details"
               DoCmd SetWarnings True
    
               ' Requery the subform to display the newly appended records.
               Me![Orders Subform].Requery
    
            Exit_btnDuplicate_Click:
               Exit Sub
    
            Err_btnDuplicate_Click:
              MsgBox Error$
              Resume Exit_btnDuplicate_Click:
            End Sub
    						
  4. Crear una nueva consulta que incluye la tabla Order Details.
  5. En el menú consulta, haga clic en Anexar consulta (o anexar en las versiones 2.0 y 7.0). Seleccione Order Details en el cuadro Nombre de tabla y, a continuación, haga clic en Aceptar.
  6. En la mitad superior de la ventana, haga doble clic en la barra de título de la lista de tabla de detalles de pedidos para seleccionar todos los campos en la lista. Arrastre los campos a la primera columna de la cuadrícula QBE.
  7. Nota: En los pasos 7-9, reemplazar la palabra OrderID con las palabras IDPEDIDO en Microsoft Access 2.0.

    Eliminar OrderID de la fila Anexar A de la columna OrderID y escriba la línea siguiente en la fila criterios:

    [formularios]! [Pedidos]. [etiqueta]

    Este criterio selecciona los registros de detalle donde la columna OrderID es el valor encontrado en el origen de OrderID propiedad Tag del formulario Pedidos.
  8. En una columna de cuadrícula QBE vacía, crear una nueva columna escribiendo la línea siguiente en la fila campo:

    NewOrderID: CLng([Forms]![Orders]![OrderID])
  9. En la columna nueva, escriba la línea siguiente en la fila Anexar A y, a continuación, guarde la consulta con nombre duplicado Order Details

    [IdPedido]

    Esto garantiza que duplican el detalle seleccionado los registros se anexan volver a la tabla Order Details con el campo IdPedido establecido para la columna OrderID de la nueva, formulario principal de registro de pedido.

Con el botón de formulario de pedidos duplicar comando nuevo


  1. Abra el formulario Pedidos en la vista formulario y mueva a un pedido que contiene un número de registros de detalle. Tenga en cuenta el número de posición de registro y el número total de registros que aparecen en los botones de exploración.
  2. Haga clic en el nuevo botón de comando duplicado.
  3. En Microsoft Access 2.0, escriba un número único de IDPEDIDO, quizás 123 y, a continuación, haga clic en Aceptar.

    Tenga en cuenta que el número total de registros se incrementa en uno y que el registro actual es el nuevo registro que acaba de agregar.

Referencias

Microsoft "obtener resultados con Microsoft Office 97,"Elemento 17, página 649,"automatizar tareas repetitivas en Microsoft Access"

Propiedades

Id. de artículo: 132032 - Última revisión: viernes, 19 de enero de 2007 - Versión: 2.1
La información de este artículo se refiere a:
  • Microsoft Access 2.0 Standard Edition
  • Microsoft Access 95 Standard Edition
  • Microsoft Access 97 Standard Edition
Palabras clave: 
kbmt kbhowto kbusage KB132032 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 132032
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com