My Assistant
![]() ![]() |
|
|
Aug 30 2010, 10:13 PM
Post
#1
|
|
|
UtterAccess Addict Posts: 187 From: Darwin, Australia |
Hi I have a small problem. I have a form which allows the user to see what months have not been recorded. Each month a return is submitted covering the full month.
The user when they add a record(Month) cicks on a button and a small form with a list box (called Me!calendar_months) comes up. It essentially does a loop to go back 12 months. The SQL Statement works it is simply the display in the list box of February. All other months work fine. The problem is that when it comes to February it states it is March. The message box states that Month(Today_date) - I is 2 which is Feb. I cant see where I am going wrong. Any help appreciated cheers Tony ------------------------------------------------------------------------- The code looks like If Me!calendar_months.ListCount > 0 Then Me!calendar_months.RowSource = "" 'clear the list box For I = 1 To backmonth ' backmonth is the number of months to go back default is 12 'problem here with february comes up as march - TO FIX If (IsNull(DLookup("[MonthEnding]", "[TblEmployeeHoursWorked]", "[OperatorID] =" & Forms!FrmInjury!subFrm_Employment.Form!OperatorID & _ " AND [SiteCode] LIKE '" & Forms!FrmInjury!subFrm_Employment.Form!SiteCode & _ "' AND [monthending] = #" & _ check_date(Format(DateSerial(Year(Today_date), (Month(Today_date) - I), (Day(Today_date) - 1)), "yyyy - mmmm")) & "#"))) Then 'MsgBox (Month(Today_date) & vbCrLf & _ Month(Today_date) - I & vbCrLf & _ DateSerial(Year(Today_date), (Month(Today_date) - I), (Day(Today_date) - 1)) & vbCrLf & _ Format(DateSerial(Year(Today_date), (Month(Today_date) - I), Day(Today_date) - 1), "yyyy - mmmm")) Me!calendar_months.AddItem Format(DateSerial(Year(Today_date), (Month(Today_date) - I), (Day(Today_date) - 1)), "yyyy - mmmm") End If Next I 'IIf(Month(Today_date) = 2, 0, 0) Me!calendar_months.AddItem "****** - *******" Me!calendar_months.AddItem "Other - Use Cal." End Function Private Function check_date(indate) As Date Dim f1, f2, f3, newdate f1 = Split(indate, " - ")(0) f2 = Split(indate, " - ")(1) 'must convert months to numbers If f2 = "January" Then check_date = DateSerial(Year("15/01/" & f1), (Month("15/01/" & f1) + 1), 0) If f2 = "February" Then check_date = DateSerial(Year("15/02/" & f1), (Month("15/02/" & f1) + 1), 0) If f2 = "March" Then check_date = DateSerial(Year("15/03/" & f1), (Month("15/03/" & f1) + 1), 0) If f2 = "April" Then check_date = DateSerial(Year("15/04/" & f1), (Month("15/04/" & f1) + 1), 0) If f2 = "May" Then check_date = DateSerial(Year("15/05/" & f1), (Month("15/05/" & f1) + 1), 0) If f2 = "June" Then check_date = DateSerial(Year("15/06/" & f1), (Month("15/06/" & f1) + 1), 0) If f2 = "July" Then check_date = DateSerial(Year("15/07/" & f1), (Month("15/07/" & f1) + 1), 0) If f2 = "August" Then check_date = DateSerial(Year("15/08/" & f1), (Month("15/08/" & f1) + 1), 0) If f2 = "September" Then check_date = DateSerial(Year("15/09/" & f1), (Month("15/09/" & f1) + 1), 0) If f2 = "October" Then check_date = DateSerial(Year("15/10/" & f1), (Month("15/10/" & f1) + 1), 0) If f2 = "November" Then check_date = DateSerial(Year("15/11/" & f1), (Month("15/11/" & f1) + 1), 0) If f2 = "December" Then check_date = DateSerial(Year("15/12/" & f1), (Month("15/12/" & f1) + 1), 0) End Function This post has been edited by tonez90: Aug 30 2010, 10:15 PM |
|
|
|
Aug 30 2010, 10:35 PM
Post
#2
|
|
|
UtterAccess VIP Posts: 638 From: Sydney, Australia |
Hi Tony,
There is a much simpler, faster and more reliable way to do this, but I need some more information.
|
|
|
|
Aug 30 2010, 11:17 PM
Post
#3
|
|
|
UtterAccess Addict Posts: 187 From: Darwin, Australia |
In answer to your questions
What is the datatype of tblEmployeeHoursWorked.MonthEnding, and what sort of format is it in (sample please)? the format is a number format. I store the actual data for the end of each month (date format) with month (number) and Year (number). Yes it is sloppy but this is an inherited database which only used to strore month and year and not the actual date so I had to continue with it. What is the datatype of tblEmployeeHoursWorked.SiteCode, and what sort of format is it in (sample please)? The site ocde is string format as it is just an identifyer (a company may have multiple sites each submitting its own monthly report). What is the datatype of tblEmployeeHoursWorked.OperatorID, and what sort of format is it in (sample please)? The OperatorID is a number allocated to each unique operator (i.e. one operator multiple sites) What can I expect to see in Forms!FrmInjury!subFrm_Employment.Form!OperatorID? Simply the ID number of the operator. What can I expect to see in Forms!FrmInjury!subFrm_Employment.Form!SiteCode? A code for the site. Note each site has a unique code (say OGP or 123 or ABC13 etc a uniue identifier which is again from the old database) Isn't the function check_date() just returning the last day of the month? Yes as the submitted form is a summary of the preceding months data (which is from 1st to last day of each month). The last day is used when we interrogate the data for reports. Given you're in NT, don't you use UK date format? In Australia we use the date format DD/MM/YYYY. In essence the process is - a monthly report comes in, the user opens the storage form and selects add new. This opens another list box form which is populated with the data (dates) for that company and site that no data has been entered for. It states the dates where no data is recorded. an example is if company xyz and site abc is selected the list box will look at the table for those records belonging to the company and site. It will then check the dates to see if a record exists for it (using the end of each month). It works for every month except for February each year as it states it is March rather thaan February. Hope that helps Tony This post has been edited by tonez90: Aug 30 2010, 11:22 PM |
|
|
|
Aug 31 2010, 12:09 AM
Post
#4
|
|
|
UtterAccess VIP Posts: 638 From: Sydney, Australia |
Hi Tony,
That's still not enought. I did ask for examples. I have to make a few assumptions here. For example, I'm assuming monthending is stored in yyyymm format. I'm also assuming Today_date is an actual date. Lastly, I'm assuming you really want to filter on an exact match for SiteCode, rather than a LIKE. CODE Dim db As Database
Dim rs As DAO.Recordset Dim strSQL As String Set db = DBEngine(0)(0) If Me!calendar_months.ListCount > 0 Then Me!calendar_months.RowSource = "" For i = 1 To backmonth strSQL = "SELECT MonthEnding " & _ "FROM tblEmployeeHoursWorked " & _ "WHERE OperatorID = " & Forms!FrmInjury!subFrm_Employment.Form!OperatorID & " " & _ "AND SiteCode = """ & Forms!FrmInjury!subFrm_Employment.Form!SiteCode & """ " & _ "AND MonthEnding = " & Format(DateSerial(Year(Today_Date), Month(Today_Date) - i, 0), "yyyymm") Set rs = db.OpenRecordset(strSQL, dbOpenSnapshot) If (rs.BOF And rs.EOF) Then Me!calendar_months.AddItem Format(DateSerial(Year(Today_Date), Month(Today_Date) +1,0), "yyyy - mmmm") End If rs.Close Next i |
|
|
|
Aug 31 2010, 06:22 PM
Post
#5
|
|
|
UtterAccess Addict Posts: 187 From: Darwin, Australia |
Thanks for the reply but unfortunately the same thing happens with February (see screen shot). This one is strange as the months are recognised etc.
Attached File(s)
|
|
|
|
Aug 31 2010, 07:05 PM
Post
#6
|
|
|
UtterAccess VIP Posts: 638 From: Sydney, Australia |
OK, then you have duplicates. Try this:
CODE strSQL = "SELECT DISTINCT MonthEnding " & _
"FROM tblEmployeeHoursWorked " & _ "WHERE OperatorID = " & Forms!FrmInjury!subFrm_Employment.Form!OperatorID & " " & _ "AND SiteCode = """ & Forms!FrmInjury!subFrm_Employment.Form!SiteCode & """ " & _ "AND MonthEnding = " & Format(DateSerial(Year(Today_Date), Month(Today_Date) - i, 0), "yyyymm") |
|
|
|
Aug 31 2010, 08:31 PM
Post
#7
|
|
|
UtterAccess Addict Posts: 187 From: Darwin, Australia |
Worked much better but had to change Month(Today_Date) +1 to Month(Today_Date) - i or else it simply displayed all the same months.
Thanks for your help |
|
|
|
![]() ![]() |
|
Go to Top · Lo-Fi Version | Time is now: 24th May 2013 - 10:34 PM |