2016-06-03 2 views
0

У меня есть таблица для моих сборок в производственном процессе [Shedmodels]. Компоненты перечислены в отдельной таблице [ShedModelsComponents]. Первичный ключ [ShedModels]: [ModelNumber]. Существует поле в [ShedModelsComponents], также называемое [ModelNumber]. Таким образом, каждый компонент присваивается определенной сборке в таблице [ShedModels]. Затем я создал форму для [ShedModels] с подформой для [ShedModelsComponents]. Все компоненты сборки выглядят так, как я хочу. Все идет нормально. Теперь многие мои сборки используют почти те же компоненты, поэтому я хотел бы скопировать или, возможно, добавить все компоненты из одной сборки в новую запись в [Shed Models]. Я нашел этот код на веб-сайте MS.Повторяющиеся записи в Subform к новой записи

Private Sub btnDuplicate_Click() 
Dim dbs As DAO.Database, Rst As DAO.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![ModelNumber] 

' Add new record to end of Recordset object. 
With Rst 
    .AddNew 
     !ModelNumber = Me!ModelNumber 
     !ModelDesc = Me!ModelDesc 
     !ModelSalePrice = Me!ModelSalePrice 
    .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 Shed Models Components" 
DoCmd.SetWarnings True 

'Requery the subform to display the newly appended records. 
Me![Shed_Models_Query].Requery 

Exit_btnduplicate_Click: 
Exit Sub 

Err_btnDuplicate_Click: 
MsgBox Error$ 
Resume Exit_btnduplicate_Click: 

End Sub 

но он возвращает ошибку, что это создаст дубликаты номеров моделей, в которые я не сомневаюсь. Как скопировать мою сборку со всеми компонентами в новую запись, но изменить номер модели (который будет введен пользователем)?

ответ

0

Сначала скопируйте родительскую запись (как и вы). Но не позволяйте форме перейти к новой записи.

Далее, получите новый ПК.

Затем скопируйте дочерние записи с использованием нового ПК. Это скелет - вы должны использовать RecordsetClone из подформы. Смотри ниже.

Наконец, переместите родительскую форму в новую запись. Подформация будет автоматически обновляться.

Public Sub CopyRecords() 

    Dim rstSource As DAO.Recordset 
    Dim rstInsert As DAO.Recordset 
    Dim fld   As DAO.Field 
    Dim strSQL  As String 
    Dim lngLoop  As Long 
    Dim lngCount As Long 

    strSQL = "SELECT * FROM tblStatus WHERE Location = '" & _ 
       "DEFx" & "' Order by Total" 

    ' Change this to the RecordsetClone of the subform. 
    Set rstInsert = CurrentDb.OpenRecordset(strSQL) 

    Set rstSource = rstInsert.Clone 
    With rstSource 
    lngCount = .RecordCount 
    For lngLoop = 1 To lngCount 
     With rstInsert 
     .AddNew 
      For Each fld In rstSource.Fields 
      With fld 
       If .Attributes And dbAutoIncrField Then 
       ' Skip Autonumber or GUID field. 
       ElseIf .Name = "ParentID" ' Name of FK. 
        rstInsert.Fields(.Name).Value = NewID ' The new ID of the parent. 
       ElseIf .Name = "Total" Then 
       ' Insert some default value. 
       rstInsert.Fields(.Name).Value = 0 
       ElseIf .Name = "PROCESSED_IND" Then 
       ' Empty a field. 
       rstInsert.Fields(.Name).Value = Null 
       Else 
       ' Copy field content. 
       rstInsert.Fields(.Name).Value = .Value 
       End If 
      End With 
      Next 
     .Update 
     End With 
     .MoveNext 
    Next 
    rstInsert.Close 
    .Close 
    End With 

    Set rstInsert = Nothing 
    Set rstSource = Nothing 

End Sub 
Смежные вопросы