Private Sub cmdTranslate_Click()
        ' This routine reads an EDI file and maps the values of its data elements into
        ' fields of a database.
            Dim i As Integer
            Dim nCount As Integer
            Dim sEntity As String
            Dim nIndex As Integer
            Dim sSefFile As String
            Dim sEdiFile As String
            Dim sSegmentID As String
            Dim sLoopSection As String
            Dim nArea As Integer
            Dim sPONumber As String
            Dim sPODate As String
    
            Me.MousePointer = vbHourglass
    
            sSefFile = sPath & "850_4010.SEF"
            sEdiFile = sPath & "850.x12"
    
            'instantiate edi doocument object
            Set oEdiDoc = New Fredi.ediDocument
    
            'changing the cursor type to forwardonly stops the component from loading the entire EDI file
            'into memory.  Saves RAM and improves performance.
            oEdiDoc.CursorType = Cursor_ForwardOnly
    
            'Makes certain that the internal Standard Reference Library is not used, but use only
            'the SEF file provided.
            Set oSchemas = oEdiDoc.GetSchemas
            oSchemas.EnableStandardReference = False
    
    
            'Loads the SEF file and EDI file.
            oEdiDoc.ImportSchema sSefFile, 0
            oEdiDoc.LoadEdi sEdiFile
    
            'Gets the first data segment of the EDI file
            Set oSegment = oEdiDoc.FirstDataSegment
   
            'Traverse thru the EDI file.  A data segment is identified by its segment ID, its loop
            'section, and Area (or table) number.
            'The values of the data elements of the segments are then stored into a database
            While Not oSegment Is Nothing
                sSegmentID = oSegment.ID
                sLoopSection = oSegment.LoopSection
                nArea = oSegment.Area
        
                If nArea = 0 Then
                    If sSegmentID = "ISA" Then
                        'map ISA data elements here
                        oRsInterchange.AddNew
                        oRsInterchange("InterchangeControlNo").Value = oSegment.DataElementValue(13)
                        oRsInterchange("SenderID").Value = oSegment.DataElementValue(6)
                        oRsInterchange("SenderID_Qlfr").Value = oSegment.DataElementValue(7)
                        sReceiptControlID = oSegment.DataElementValue(13) & oSegment.DataElementValue(6) & oSegment.DataElementValue(7)
                        oRsInterchange("ReceiptControlID").Value = sReceiptControlID
                        oRsInterchange.Update
                
                    ElseIf sSegmentID = "GS" Then
                        sGroupNo = oSegment.DataElementValue(6)
                
                    ElseIf sSegmentID = "GE" Then
                    ElseIf sSegmentID = "IEA" Then
                        oRsInterchange.Update
                    End If
        
                ElseIf nArea = 1 Then
                    If sLoopSection = "" Then
                        If sSegmentID = "ST" Then
                            'map ST data element here
                            oRsTransactionSet.AddNew
                            oRsTransactionSet("ReceiptControlID").Value = sReceiptControlID
                            oRsTransactionSet("GroupNo").Value = sGroupNo
                            oRsTransactionSet("TransactionSetControlNo").Value = oSegment.DataElementValue(2)
                            oRsTransactionSet("TransactionSetNo").Value = oSegment.DataElementValue(1)
                            oRsTransactionSet.Update
                            sTSID = oRsTransactionSet("TSID").Value
                            sTSNo = oRsTransactionSet("TransactionSetNo").Value
                            sTSControlNo = oRsTransactionSet("TransactionSetControlNo").Value
                    
                            oRsPOMaster.AddNew
                            oRsPOMaster("TSID").Value = sTSID
                            oRsPOMaster("TransactionSetNo").Value = sTSNo
                            oRsPOMaster("TransactionSetControlNo").Value = sTSControlNo
                            iIndex = -1
                
                        ElseIf sSegmentID = "BEG" Then
                            sPONumber = oSegment.DataElementValue(3)
                            sPODate = StringToDate(oSegment.DataElementValue(5))
                            oRsPOMaster("PONumber").Value = sPONumber
                            oRsPOMaster("PODate").Value = sPODate
                    
                        ElseIf sSegmentID = "REF" Then
                            oRsPOMaster("VendorIDNo").Value = oSegment.DataElementValue(2)
                    
                        ElseIf sSegmentID = "ITD" Then
                            oRsPOMaster("DiscountPerc").Value = oSegment.DataElementValue(3)
                            oRsPOMaster("DiscountDaysDue").Value = oSegment.DataElementValue(5)
                            oRsPOMaster("NetDays").Value = oSegment.DataElementValue(7)
                    
                        ElseIf sSegmentID = "DTM" Then
                            oRsPOMaster("DeliveryDate").Value = StringToDate(oSegment.DataElementValue(2))
                        End If
                
                    ElseIf sLoopSection = "N1" Then
                        'Obtains the qulaifier for the loop to determine the kind of information the
                        'segments in the loop holds
                        If sSegmentID = "N1" Then
                            sEntity = oSegment.DataElementValue(1)
                        End If
                
                        If sEntity = "BT" Then  'Bill To Information
                            If sSegmentID = "N1" Then
                                oRsPOMaster("BillToName").Value = oSegment.DataElementValue(2)
                                oRsPOMaster("BillToID").Value = oSegment.DataElementValue(4)
                        
                            ElseIf sSegmentID = "N3" Then
                                oRsPOMaster("BillToAddress").Value = oSegment.DataElementValue(1)
                        
                            ElseIf sSegmentID = "N4" Then
                                oRsPOMaster("BillToCity").Value = oSegment.DataElementValue(1)
                                oRsPOMaster("BillToState").Value = oSegment.DataElementValue(2)
                                oRsPOMaster("BillToZip").Value = oSegment.DataElementValue(3)
                            End If
                    
                        ElseIf sEntity = "ST" Then  'Ship To Information
                            If sSegmentID = "N1" Then
                                oRsPOMaster("ShipToName").Value = oSegment.DataElementValue(2)
                                oRsPOMaster("ShipToID").Value = oSegment.DataElementValue(4)
                        
                            ElseIf sSegmentID = "N3" Then
                                oRsPOMaster("ShipToAddress").Value = oSegment.DataElementValue(1)
                        
                            ElseIf sSegmentID = "N4" Then
                                oRsPOMaster("ShipToCity").Value = oSegment.DataElementValue(1)
                                oRsPOMaster("ShipToState").Value = oSegment.DataElementValue(2)
                                oRsPOMaster("ShipToZip").Value = oSegment.DataElementValue(3)
                            End If
                        End If
                    End If
                
                ElseIf nArea = 2 Then
                    If sLoopSection = "PO1" Then
                        If sSegmentID = "PO1" Then
                            If Not oRsPODetail.EOF Then
                                oRsPODetail.Update  'save the previous record before creating a new record
                            End If
                            oRsPODetail.AddNew
                            oRsPODetail("TSID").Value = sTSID
                            oRsPODetail("PONumber").Value = sPONumber
                            oRsPODetail("PODate").Value = sPODate
                    
                            iIndex = iIndex + 1
                            oRsPODetail("LineNo").Value = iIndex
                            oRsPODetail("Quantity").Value = oSegment.DataElementValue(2)
                            oRsPODetail("Unit").Value = oSegment.DataElementValue(3)
                            oRsPODetail("UnitPrice").Value = oSegment.DataElementValue(4)
                            oRsPODetail("CatalogNo").Value = oSegment.DataElementValue(7)
                            oRsPODetail("EAN").Value = oSegment.DataElementValue(9)
                    
                        ElseIf sSegmentID = "PO4" Then
                            oRsPODetail("Package").Value = oSegment.DataElementValue(1)
                            oRsPODetail("Weights").Value = oSegment.DataElementValue(2)
                    
                        End If
                
                    ElseIf sLoopSection = "PO1;PID" Then
                        If sSegmentID = "PID" Then
                            oRsPODetail("Description").Value = oSegment.DataElementValue(5)
                        End If
                    End If
            
                ElseIf nArea = 3 Then
                    If sLoopSection = "" Then
                        If sSegmentID = "CTT" Then
                
                        ElseIf sSegmentID = "SE" Then
                            'The SE segment marks the end of the transaction set so it is a good place to update records
                            oRsPODetail.Update
                            oRsPOMaster.Update
                        End If
                    End If
                End If
        
                'get next data segment
                Set oSegment = oSegment.Next
            Wend
    
            Set oSegment = Nothing
    
            Me.MousePointer = vbNormal
            cmdTranslate.Enabled = False
            cmdPrevious.Enabled = True
            cmdNext.Enabled = True
            cmdPrevious.Enabled = False
            
            oRsPOMaster.Close
            oRsPOMaster.Open "Select * from POMaster", oConn, adOpenDynamic, adLockOptimistic
    
            If Not oRsPOMaster.EOF Then
                FormRefresh
            End If

        End Sub
    

    Click here to download a trial version of the Framework EDI