Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ChildID | ParentID | Data2 | InputDate
- ------------------------------------
- 1 | 345 | 100 | 3-5-2016
- 2 | 345 | 0 | 3-12-2016
- 3 | 345 | 150 | 3-19-2016
- 4 | 345 | 0 | 4-20-2016
- ... more children with different parent IDs
- Option Compare Database
- Sub SoldOut()
- On Error GoTo ProcError
- Dim rs As DAO.Recordset
- Set rs = CurrentDb.OpenRecordset("MainDataTable") 'This is the flat file version of the data above
- 'Check to see if the recordset actually contains rows
- If Not (rs.EOF And rs.BOF) Then
- rs.MoveLast
- rs.MoveFirst 'Unnecessary in this case, but still a good habit
- Do Until rs.EOF = True
- GetLastWeek = 0
- If Not rs("Data") > 0 Then
- rs.Edit
- rs("Data") = GetLastWeek(rs('ChildID'), rs('ParentID'), rs('Data'), rs('InputDate'))
- rs.Update
- End If
- 'Move to the next record. Don't ever forget to do this.
- rs.MoveNext
- Loop
- Else
- MsgBox "There are no records in the recordset."
- End If
- ProcExit:
- On Error Resume Next
- rs.Close 'Close the recordset
- Set rs = Nothing 'Clean up
- Exit Sub
- ProcError:
- MsgBox Err.Description
- Resume ProcExit
- End Sub
- Private Function GetLastWeek(ChildID, ParentID As Long, InputDate As Date) As Integer
- 'given a record it looks up the weeks before and returns it if it exists
- Dim rst As DAO.Recordset, strSQL As String, rc As Integer ' SQL Code for seeing if last week's data exists.
- strSQL = "SELECT * " & _
- "FROM MainDataTable " & _
- "WHERE MainDataTable.[ParentId] = " & ParentID & "AND MainDataTable.[InputDate] <# " & InputDate & "AND NOT MainDataTable.[Data] = 0
- ORDER BY MainDataTable.[InputDate] DESC;"
- Set rst = CurrentDb.OpenRecordset(strSQL): rst.MoveLast: rst.MoveFirst
- rc = rst.RecordCount
- If rc = 0 Then GoTo Cleanup 'if no record, then we are out of luck
- If rc > 0 Then 'If there's some Record
- Do Until rs.EOF = True Or GetLastWeek > 0
- Dim price As Integer: price = rst("Data")
- If price > 0 Then: GetLastWeek = price
- rs.MoveNext
- Loop
- End If
- Cleanup:
- rst.Close
- Set rst = Nothing
- If GetLastWeek = 0 Then GetLastWeek = 1 '1 means no data was found
- 'Set so the output if nothing is found to 1 so that the code doesn't have to run on the same rows every single week
- End Function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement