screwed up "do until" loop somehow..

natsirtm

Registered User.
Local time
Yesterday, 20:45
Joined
Apr 30, 2007
Messages
57
First here is my code
Code:
Option Compare Database

Sub tmatch()

    ' Set Database
    Dim db As DAO.Database
    Set db = CurrentDb
    
    ' Get unique secondaries without matching record in list with agreements
    Dim strSql1 As String
    strSql1 = "SELECT [SECONDARIES_Unique_wo-Agreements].ID, [SECONDARIES_Unique_wo-Agreements].[Account Number], [SECONDARIES_Unique_wo-Agreements].Premise, [SECONDARIES_Unique_wo-Agreements].[Customer Number], [SECONDARIES_Unique_wo-Agreements].[Customer Name], [SECONDARIES_Unique_wo-Agreements].Transformer, [SECONDARIES_Unique_wo-Agreements].[Tariff Code], [SECONDARIES_Unique_wo-Agreements].[Tariff Description], [SECONDARIES_Unique_wo-Agreements].[Consumption (Kwh)] " & vbCrLf & _
    "FROM [SECONDARIES_Unique_wo-Agreements];"
    Debug.Print ("sql1: " & strSql1)
    
    ' Set resultset variable
    Dim rst1 As DAO.Recordset
    Set rst1 = db.OpenRecordset(strSql1, dbOpenDynaset)
    
    Dim n As Long
    n = 1
    
    ' Do until i run out of records
    Do Until rst1.EOF
    
        ' Get primary records where transformer matches secondary transformer
        Dim strSql2 As String
        Dim Trans2 As String
        Trans2 = rst1.Fields("Transformer").Value
        Debug.Print ("Trans2: " & Trans2)
        
        strSql2 = "SELECT PRIMARIES.ID, PRIMARIES.Account, PRIMARIES.Premise, PRIMARIES.[Service Pt], PRIMARIES.[Customer No], PRIMARIES.[Customer Name], PRIMARIES.Transformer, PRIMARIES.Tariff, PRIMARIES.[Tariff Decs] " & vbCrLf & _
        "FROM PRIMARIES " & vbCrLf & _
        "WHERE (((PRIMARIES.Transformer)='" & Trans2 & "'));"
        Debug.Print ("sql2: " & strSql2)
        
        ' Set resultset variable
        Dim rst2 As DAO.Recordset
        Set rst2 = db.OpenRecordset(strSql2, dbOpenDynaset)
        
        ' Customer name from secondary
        Dim CustName2 As String
        CustName2 = rst1.Fields("Customer Name").Value
        Debug.Print ("CustName2: " & CustName2)
        
        Dim m As Long
        m = 1
        
        Do Until rst2.EOF
            
            Dim ID1 As Long
            ID1 = rst2.Fields("ID").Value
            Debug.Print ("ID1: " & ID1)
            
            Dim CustName1 As String
            CustName1 = rst2.Fields("Customer Name").Value
            Debug.Print ("CustName1: " & CustName1)
        
            ' First check for exact match
            If CustName1 = CustName2 Then
                
                ' Update with PK and "exact"
                Dim strSql3 As String
                strSql3 = "UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '" & ID1 & "', [SECONDARIES_Unique_wo-Agreements].[Match] = 'exact'" & vbCrLf & _
                "WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '" & Trans2 & "'));"
                Debug.Print ("sql3: " & strSql3)
                
                DoCmd.SetWarnings False
                    DoCmd.RunSQL (strSql3)
                DoCmd.SetWarnings True
            Else
                ' Second check for partial match
                Dim CN1arr() As String
                CN1arr() = Split(CustName1, " ")
                
                Dim CN2arr() As String
                CN2arr() = Split(CustName2, " ")
                
                Dim NumMatches As Long
                NumMatches = 0
                
                For Each v In CN1arr
                    For Each w In CN2arr
                        If v = w Then
                            
                            NumMatches = NumMatches + 1
                            
                        End If
                    Next w
                Next v
                
                If NumMatches > 0 Then
                
                    ' Update with PK and "partial"
                    Dim strSql4 As String
                    strSql4 = "UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '" & ID1 & "', [SECONDARIES_Unique_wo-Agreements].[Match] = 'partial: " & NumMatches & "'" & vbCrLf & _
                    "WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '" & Trans2 & "'));"
                    Debug.Print ("sql4: " & strSql4)
                    
                    DoCmd.SetWarnings False
                        DoCmd.RunSQL (strSql4)
                    DoCmd.SetWarnings True
                End If
                
            End If
            
            Debug.Print (m & ": Finished ONE PRIMARY")
            m = m + 1
            
        Loop
        
        Debug.Print (n & ": Finished SECONDARY - last")
        n = n + 1
        
    Loop

End Sub

It seems to never break out of the second "do until" loop. I know this is just some silly little thing, but I can't for the life of my see where i've screwed up the logic.

Here is my debug.print output (you can see where I placed the debug comments in the code above)

A. print out strSql1
sql1: SELECT [SECONDARIES_Unique_wo-Agreements].ID, [SECONDARIES_Unique_wo-Agreements].[Account Number], [SECONDARIES_Unique_wo-Agreements].Premise, [SECONDARIES_Unique_wo-Agreements].[Customer Number], [SECONDARIES_Unique_wo-Agreements].[Customer Name], [SECONDARIES_Unique_wo-Agreements].Transformer, [SECONDARIES_Unique_wo-Agreements].[Tariff Code], [SECONDARIES_Unique_wo-Agreements].[Tariff Description], [SECONDARIES_Unique_wo-Agreements].[Consumption (Kwh)]
FROM [SECONDARIES_Unique_wo-Agreements];

B. print out transformer number
Trans2: 0000003069/07070

C. print out strSql2 - bolded is a varible
sql2: SELECT PRIMARIES.ID, PRIMARIES.Account, PRIMARIES.Premise, PRIMARIES.[Service Pt], PRIMARIES.[Customer No], PRIMARIES.[Customer Name], PRIMARIES.Transformer, PRIMARIES.Tariff, PRIMARIES.[Tariff Decs]
FROM PRIMARIES
WHERE (((PRIMARIES.Transformer)='0000003069/07070'));

D. print out customer name associated to secondary transformer
CustName2: MR BRAD GARDINER

E. print out primary ID to update
ID1: 10836

F. print out customer name associated to primary transformer
CustName1: MR BRAD GARDINER

G. print out strSql3 - bolded is from variable
sql3: UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '10836', [SECONDARIES_Unique_wo-Agreements].[Match] = 'exact'
WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '0000003069/07070'));

H. print our number of loops through 2nd "do until"
1: Finished ONE PRIMARY

repeats E - H
ID1: 10836
CustName1: MR BRAD GARDINER
sql3: UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '10836', [SECONDARIES_Unique_wo-Agreements].[Match] = 'exact'
WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '0000003069/07070'));
2: Finished ONE PRIMARY
ID1: 10836
CustName1: MR BRAD GARDINER
sql3: UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '10836', [SECONDARIES_Unique_wo-Agreements].[Match] = 'exact'
WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '0000003069/07070'));
3: Finished ONE PRIMARY
ID1: 10836
CustName1: MR BRAD GARDINER
sql3: UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '10836', [SECONDARIES_Unique_wo-Agreements].[Match] = 'exact'
WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '0000003069/07070'));
4: Finished ONE PRIMARY
ID1: 10836
CustName1: MR BRAD GARDINER
sql3: UPDATE [SECONDARIES_Unique_wo-Agreements] SET [SECONDARIES_Unique_wo-Agreements].[PRIMARIES_ID-PK] = '10836', [SECONDARIES_Unique_wo-Agreements].[Match] = 'exact'
WHERE ((([SECONDARIES_Unique_wo-Agreements].Transformer)= '0000003069/07070'));
5: Finished ONE PRIMARY
 
I don't see any

rst1.MoveNext

or

rst2.MoveNext

anywhere in the code.
 
that was it... cheers!
 

Users who are viewing this thread

Back
Top Bottom