Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Vba内置的一年假期功能?_Sql_Ms Access_Vba_Ms Access 2003 - Fatal编程技术网

Sql Vba内置的一年假期功能?

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

所以基本上我有两张桌子。日期表和statHoliday表。在这个国家,你能找到的所有假日都可以在statholiday桌上找到,这很好

我自动填充myDate表以获取每个星期一,而这不是一个 统计假期。 每次打开数据库时,我都会从myDate表中删除所有内容,然后使用auto execute重新填充所有内容。 虽然它工作得很好,但我正在寻找一种更有效的方法来做到这一点。我认为从表中删除所有内容并在多年内更新需要时间。 在vba中是否有用于假日的内置函数? mydate表如下所示:

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