scubadiver said:
Is it just a table with one 'date' field? How would this work in a query?
That's correct. it could work in a query like this:
Sub CalendarTest()
Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat
.Create _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\DropMe.mdb"
With .ActiveConnection
' Create Calendar table for June 2006
.Execute _
"CREATE TABLE Calendar (dt DATETIME NOT" & _
" NULL PRIMARY KEY)"
.Execute _
"INSERT INTO Calendar (dt)" & _
" VALUES (#2006-06-01#);"
.Execute _
"INSERT INTO Calendar (dt)" & _
"SELECT DATESERIAL(2006, 6, Units.nbr + Tens.nbr)" & _
" AS dt FROM (SELECT nbr FROM ( SELECT 0" & _
" AS nbr FROM Calendar UNION ALL SELECT 1" & _
" FROM Calendar UNION ALL SELECT 2 FROM Calendar" & _
" UNION ALL SELECT 3 FROM Calendar UNION" & _
" ALL SELECT 4 FROM Calendar UNION ALL SELECT" & _
" 5 FROM Calendar UNION ALL SELECT 6 FROM" & _
" Calendar UNION ALL SELECT 7 FROM Calendar" & _
" UNION ALL SELECT 8 FROM Calendar UNION" & _
" ALL SELECT 9 FROM Calendar ) AS Digits" & _
" ) AS Units, ( SELECT nbr * 10 AS nbr FROM" & _
" ( SELECT 0 AS nbr FROM Calendar UNION ALL" & _
" SELECT 1 FROM Calendar UNION ALL SELECT" & _
" 2 FROM Calendar UNION ALL SELECT 3 FROM" & _
" Calendar UNION ALL SELECT 4 FROM Calendar" & _
" UNION ALL SELECT 5 FROM Calendar UNION" & _
" ALL SELECT 6 FROM Calendar UNION ALL SELECT" & _
" 7 FROM Calendar UNION ALL SELECT 8 FROM" & _
" Calendar UNION ALL SELECT 9 FROM Calendar" & _
" ) AS Digits) AS Tens WHERE Units.nbr +" & _
" Tens.nbr BETWEEN 2 AND 30 "
' Create test table
.Execute _
"CREATE TABLE Test (date_col DATETIME" & _
" NOT NULL);"
' Create test data rows
.Execute _
"INSERT INTO Test (date_col) VALUES" & _
" (#2006-06-05#);"
.Execute _
"INSERT INTO Test (date_col) VALUES" & _
" (#2006-06-10#);"
.Execute _
"INSERT INTO Test (date_col) VALUES" & _
" (#2006-06-15#);"
.Execute _
"INSERT INTO Test (date_col) VALUES" & _
" (#2006-06-20#);"
.Execute _
"INSERT INTO Test (date_col) VALUES" & _
" (#2006-06-25#);"
.Execute _
"INSERT INTO Test (date_col) VALUES" & _
" (#2006-06-30#);"
' Create VIEW ('Query')
.Execute _
"CREATE VIEW TestMissingDates AS SELECT dt" & _
" FROM Calendar AS C1 LEFT JOIN Test AS T1" & _
" ON C1.dt = T1.date_col WHERE T1.date_col" & _
" IS NULL;"
' Show dates that are not present
' in the test table
Dim rs
Set rs = .Execute( _
"SELECT dt FROM TestMissingDates;")
MsgBox rs.GetString
rs.Close
End With
Set .ActiveConnection = Nothing
End With
End Sub
Jamie.
--