# New Process Sheet Analysis generated on: 4/1/2025 4:04:01 PM --- ## Record Source - [[Tables/Process]] ## Controls | Control Name | Reference | |--------------|-----------| | *None* | - | ## VBA Code ```vba Option Compare Database 'Use database order for string comparisons Dim PartN$ Private Sub AddAProcShet() Dim MainDB As Database, MainSet As Recordset Dim Main2DB As Database, Main2Set As Recordset Dim Main3DB As Database, Main3Set As Recordset Dim MachNamesDB As Database, MachNamesSet As Recordset Dim MachQDB As Database, MachQSet As Recordset Dim MainTableDef As TableDef Set MainDB = DBEngine.Workspaces(0).Databases(0) Set Main2DB = DBEngine.Workspaces(0).Databases(0) Set MachNamesDB = DBEngine.Workspaces(0).Databases(0) Set MachQDB = DBEngine.Workspaces(0).Databases(0) ErrMessage.Caption = " " GoSub Open_Mains Set MachNamesSet = MachNamesDB.OpenRecordset("MachineNames", DB_OPEN_TABLE) ' Create dynaset. Set MachQSet = MachQDB.OpenRecordset("Machines", DB_OPEN_TABLE) ' Create dynaset. If (Not (IsNull(Field1))) Or (Trim$(NewPartName_Parm$) = "") Then PartN$ = Field1 If PartN$ <> "" Then MainSet.AddNew 'MainSet!PartNumber = Left$(PartN$, 9) 'MainSet!PhantomNumber = Left$(PartN$, 9) MainSet!PartNumber = Left$(PartN$, 11) MainSet!PhantomNumber = Left$(PartN$, 11) MainSet!IssueNumber = " " MainSet!Deburr = "Within" MainSet!PrintSize = "B" MainSet!GrainNone = True ' mainset.IssueDate = " " MainSet!CellDeburrTypes = "Auto" MainSet!Warehouse = "90" MainSet!PressBrake = 1 MainSet!CalculationStatus = 1 ef = 0 On Error GoTo DUPLICATE_rec MainSet.Update On Error GoTo 0 If ef = 1 Then Exit Sub End If Refresh If NewPartName_Parm$ <> "NEW" Then MainSet.Seek "=", NewPartName_Parm$ Main2Set.Seek "=", PartN$ Main2Set.Edit For i = 0 To MainSet.Fields.Count - 1 Debug.Print "; "; MainSet.Fields(i).name If MainSet.Fields(i).name <> "PartNumber" Then Main2Set.Fields(i) = MainSet.Fields(i) End If Next i Main2Set!PartNumber = PartN$ 'Main2Set!PhantomNumber = Left$(PartN$, 9) Main2Set!PhantomNumber = Left$(PartN$, 11) Main2Set!CalculationStatus = 1 Main2Set.Update GoSub OPEN_Addnl MainSet.MoveFirst MainSet.Seek ">=", NewPartName_Parm$ If Not (MainSet.NoMatch) Then Do While Trim$(MainSet!PartNumber) = NewPartName_Parm$ Main2Set.AddNew For i = 0 To MainSet.Fields.Count - 1 Main2Set.Fields(i) = MainSet.Fields(i) Next i Debug.Print Main2Set!PartNumber Debug.Print Main2Set!OpCode Main2Set!PartNumber = PartN$ Main2Set.Update MainSet.MoveNext If MainSet.EOF Then Exit Do Loop End If GoSub OPEN_Machs MainSet.MoveFirst MainSet.Seek ">=", NewPartName_Parm$ If Not (MainSet.NoMatch) Then Do While Trim$(MainSet!PartNumber) = NewPartName_Parm$ Main2Set.AddNew For i = 0 To MainSet.Fields.Count - 1 Main2Set.Fields(i) = MainSet.Fields(i) Next i Main2Set!PartNumber = PartN$ Main2Set.Update MainSet.MoveNext If MainSet.EOF Then Exit Do Loop End If GoSub OPEN_Press MainSet.MoveFirst MainSet.Seek ">=", NewPartName_Parm$ If Not (MainSet.NoMatch) Then Do While Trim$(MainSet!PartNumber) = NewPartName_Parm$ Main2Set.AddNew For i = 0 To MainSet.Fields.Count - 1 Main2Set.Fields(i) = MainSet.Fields(i) Next i Main2Set!PartNumber = PartN$ Main2Set.Update MainSet.MoveNext If MainSet.EOF Then Exit Do Loop End If GoSub OPEN_Pem MainSet.MoveFirst MainSet.Seek ">=", NewPartName_Parm$ If Not (MainSet.NoMatch) Then Do While Trim$(MainSet!PartNumber) = NewPartName_Parm$ Main2Set.AddNew For i = 0 To MainSet.Fields.Count - 1 Main2Set.Fields(i) = MainSet.Fields(i) Next i Main2Set!PartNumber = PartN$ Main2Set.Update MainSet.MoveNext If MainSet.EOF Then Exit Do Loop End If GoSub Open_Mains End If End If End If Field1 = "" ErrMessage.Caption = "Part " + PartN$ + " added" Exit Sub Open_Mains: Set MainSet = MainDB.OpenRecordset("Process", DB_OPEN_TABLE) ' Create dynaset. Set Main2Set = Main2DB.OpenRecordset("Process", DB_OPEN_TABLE) ' Create dynaset. MainSet.Index = "PrimaryKey" Main2Set.Index = "PrimaryKey" Return OPEN_Addnl: Set MainSet = MainDB.OpenRecordset("AddnlProc", DB_OPEN_TABLE) ' Create dynaset. Set Main2Set = Main2DB.OpenRecordset("AddnlProc", DB_OPEN_TABLE) ' Create dynaset. MainSet.Index = "PartNumber" Main2Set.Index = "PartNumber" Return OPEN_Machs: Set MainSet = MainDB.OpenRecordset("Machines", DB_OPEN_TABLE) ' Create dynaset. Set Main2Set = Main2DB.OpenRecordset("Machines", DB_OPEN_TABLE) ' Create dynaset. MainSet.Index = "PartNumber" Main2Set.Index = "PartNumber" Refresh Return OPEN_Press: Set MainSet = MainDB.OpenRecordset("PressBrakeOPs", DB_OPEN_TABLE) ' Create dynaset. Set Main2Set = Main2DB.OpenRecordset("PressBrakeOPs", DB_OPEN_TABLE) ' Create dynaset. MainSet.Index = "PartNumber" Main2Set.Index = "PartNumber" Refresh Return OPEN_Pem: Set MainSet = MainDB.OpenRecordset("PemPress Ops", DB_OPEN_TABLE) ' Create dynaset. Set Main2Set = Main2DB.OpenRecordset("PemPress Ops", DB_OPEN_TABLE) ' Create dynaset. MainSet.Index = "PartNumber" Main2Set.Index = "PartNumber" Refresh Return DUPLICATE_rec: ErrMessage.Caption = Error$ + " Part - " + PartN$ ef = 1 Resume Next End Sub Private Sub Button0_Click() On Error GoTo Err_Button0_Click Dim DocName As String Dim LinkCriteria As String PN$ = NewPartName_Parm$ DocName = PrimaryScreen$ DoCmd.OpenForm DocName, , , LinkCriteria DoCmd.GoToControl "PartName" DoCmd.GoToControl "PartNumber" DoCmd.FindRecord PN$ DoCmd.SelectObject A_FORM, "New Process Sheet" DoCmd.Close Exit_Button0_Click: Exit Sub Err_Button0_Click: MsgBox Error$ Resume Exit_Button0_Click End Sub Private Sub Button3_Click() Call AddAProcShet NewPartName_Parm$ = PartN$ Call Button0_Click Call LogFile(PartN$, "Add Process") End Sub ``` ## What it does Add AProc Sheet Subroutine ========================== ### Description This VBA subroutine, `AddAProcShet`, is responsible for adding new records to three different tables (`Mains`, `MachineNames`, and `Machines`) in a database. It also updates the `PartNumber` field of an existing record in the `Mains` table. ### Parameters * `NewPartName_Parm$`: A string parameter that contains the part number of the machine being added or updated. ### Flow 1. The subroutine initializes several databases (`MainDB`, `Main2DB`, `MachNamesDB`, and `MachQDB`) and recordsets (`MainSet` and `MachSets`). 2. If a new part name is provided, it creates two dynamic recordsets: one for the `MachineNames` table and one for the `Machines` table. 3. It checks if a new part number or an empty string is provided. If so, it extracts the part number from the input string. 4. If the part number is not empty, it creates a new record in the `Mains` table with default values for certain fields (e.g., `PartNumber`, `PhantomNumber`, and `CalculationStatus`). It then updates the existing record with the same part number if found. 5. The subroutine checks for duplicates based on the `PartNumber` field and performs additional actions if a duplicate is found: * If no duplicates are found, it adds new records to both the `Machines` table (`Main2Set`) and the `MachineNames` table (`MachQSet`). * If a duplicate is found, it updates existing records in both tables with the same part number. 6. After adding or updating records, the subroutine calls three subroutines: `OPEN_Addnl`, `OPEN_Machs`, and `OPEN_Press`, which are not shown in this code snippet. ### Notes * The `Option Compare Database` line specifies that string comparisons should be performed using the database order (i.e., case-sensitive). * The `ErrMessage.Caption` line is used to clear an error message, indicating that no errors have occurred so far. * The `GoSub` statement is used to jump to a specified subroutine (`Open_Mains`) at some point in the code. ### Code Quality The code is generally well-organized and follows standard VBA coding conventions. However, there are some areas for improvement: * Comments: While there are some comments scattered throughout the code, they could be more comprehensive and provide clearer explanations of what each section does. * Variable naming: Some variable names (e.g., `MainDB`, `MachNamesSet`) could be more descriptive or follow a consistent naming convention. * Error handling: The code uses a simple error handling mechanism (`On Error GoTo DUPLICATE_rec`), but it would be better to handle specific errors and exceptions in a more explicit way.