Sql Vba内置的一年假期功能?
所以基本上我有两张桌子。日期表和statHoliday表。在这个国家,你能找到的所有假日都可以在statholiday桌上找到,这很好 我自动填充myDate表以获取每个星期一,而这不是一个 统计假期。 每次打开数据库时,我都会从myDate表中删除所有内容,然后使用auto execute重新填充所有内容。 虽然它工作得很好,但我正在寻找一种更有效的方法来做到这一点。我认为从表中删除所有内容并在多年内更新需要时间。 在vba中是否有用于假日的内置函数? mydate表如下所示:Sql Vba内置的一年假期功能?,sql,ms-access,vba,ms-access-2003,Sql,Ms Access,Vba,Ms Access 2003,所以基本上我有两张桌子。日期表和statHoliday表。在这个国家,你能找到的所有假日都可以在statholiday桌上找到,这很好 我自动填充myDate表以获取每个星期一,而这不是一个 统计假期。 每次打开数据库时,我都会从myDate表中删除所有内容,然后使用auto execute重新填充所有内容。 虽然它工作得很好,但我正在寻找一种更有效的方法来做到这一点。我认为从表中删除所有内容并在多年内更新需要时间。 在vba中是否有用于假日的内置函数? mydate表如下所示: the_dat
the_date
---------
08-01-2015
15-01-2015
22-01-2015
29-01-2015
//stat-holiday table
name | Date
---------------------
New Year | 01-01-2015
Christmas| 25-12-2015
我的职能如下:
Function dateTblUpdate()
DoCmd.SetWarnings False
Dim dt As Date
Dim rs As DAO.Recordset
Dim db As DAO.Database
Set db = CurrentDb
Dim sqlS As String
sqlS = "Select Date as holi from statHolidaysTbl"
Set rs = db.OpenRecordset(sqlS)
DoCmd.RunSQL "DELETE FROM [date-table]"
For dt = #1/1/2010# To DateSerial(Year(Now), Month(Now), Day(Now))
If Weekday(dt) = 2 Then
Do While Not rs.EOF
If rs!holi <> dt Then
DoCmd.RunSQL "Insert into [date-table] (the_date) values(#" & dt & "#)"
End If
rs.MoveNext
Loop
rs.MoveFirst
End If
Next
DoCmd.SetWarnings True
End Function
不,假期没有内置的VBA功能。您必须使用定制的方法来处理组织选择的假日 在您当前的方法中,您放弃[date table]的内容,然后使用非节假日的周一日期重新加载它 我认为将所有的星期一日期保留在[date table]中并使用只返回非假日星期一的查询应该更简单。您可以通过将[date table]左键连接到statHolidaysTbl,并仅请求假日日期右侧为空的候选行来实现这一点 将此另存为qryMondays: 选择d.U日期 从…起 [日期表]如d所示 左连接statHolidaysTbl为h d.日期=h.日期 其中h.日期为空; 然后,无论您以前在哪里使用[date table],都要使用qryMondays
当您需要在[日期表]中添加最近的星期一日期时,只需添加它们即可。假设您同时更新statHolidaysTbl,查询将自动排除星期一假期。但不要丢弃[日期表]中的所有内容,然后从头开始添加所有的星期一来更新[日期表]。这将是不必要的工作,而且毫无理由会使数据库膨胀 如果您的代码按预期工作,并且您正在寻找更好、更干净和/或更高效的编码方式,您可能会感兴趣:您不需要每次都重新加载日期表。使用查询将日期表左键联接到假日表。然后,所需的星期一位于查询行中,其中statHolidaysTbl.Date为Null