使用sql查询用1980-01-01到今天的日期填充Access中的日期列

使用sql查询用1980-01-01到今天的日期填充Access中的日期列,sql,ms-access,vba,Sql,Ms Access,Vba,我有一个名为dates的Access表,其中有一列名为Date,格式为Date。我需要将1980-01-01到今天的日期在列中每次递增1天。1980-01-01将在第一排 如何使用sql查询实现这一点 首先,将列重命名为其他名称,然后是日期,因为它是一个保留字,会给您带来很多麻烦。在我的示例中,我将列命名为DateField 我假设当你说sql查询时,你指的是access sql,在这种情况下,它无法完成,因为access sql不支持循环 但是,您可以通过VBA轻松完成此操作,请参见以下内容:

我有一个名为dates的Access表,其中有一列名为Date,格式为Date。我需要将1980-01-01到今天的日期在列中每次递增1天。1980-01-01将在第一排


如何使用sql查询实现这一点

首先,将列重命名为其他名称,然后是日期,因为它是一个保留字,会给您带来很多麻烦。在我的示例中,我将列命名为DateField

我假设当你说sql查询时,你指的是access sql,在这种情况下,它无法完成,因为access sql不支持循环

但是,您可以通过VBA轻松完成此操作,请参见以下内容:

Sub Main()
    Dim myDate As Date
    Dim myDateString As String
    Dim strSQL As String

    myDate = #1/1/1980#

    Do While myDate < Now
        myDateString = Format(myDate, "yyyy-mm-dd")

        strSQL = "INSERT INTO DateTable (DateField) VALUES(#" & myDate & "#)"

        CurrentDb.Execute strSQL

        myDate = myDate + 1
    Loop
End Sub

如果有合适的数字表,可以使用Access SQL添加这些日期

插入日期[日期] 选择CDaten。选择\u编号 从tblNumbers开始为n 式中,n.介于29221和42037之间的_编号; 或者从tblNumbers中的1开始并添加偏移量

插入日期[日期] 选择CDaten.U编号+29220 从tblNumbers开始为n 式中,n.介于1和12817之间的_数; 但如果没有合适的数字表,则需要创建一个并填充它。这与您开始遇到的问题类似,只加载普通数字而不是日期

最初的任务非常简单,我将使用一次性VBA过程而不是Access SQL。这一次用了不到2秒的时间加载my dates表,其中包含所需的12817个日期值:

Dim数据库作为DAO.Database Dim rs作为DAO.Recordset 将dte变暗为日期 Set db=CurrentDb 设置rs=db.OpenRecordsetdates、dbOpenTable、dbAppendOnly 用rs 对于dte=1980年1月1日至今 .AddNew ![日期].Value=dte 使现代化 下一个 关 以
列的数据类型是什么?数据类型是我将日期作为列名的日期,也是PS:我总是在将日期传递给查询之前将其转换为字符串,以防止区域设置错误。SQL格式yyyy mm ss是最安全的。啊,谢谢!请问:日期列名称可能导致哪些错误?我知道它不被推荐,但它是一个更直观的名字,而且直到现在还没有引起任何错误!问题是Date也是函数名,当SQL引擎无法决定是选择列还是调用函数时,Date和冲突很容易发生。只需搜索access保留字即可查看更多示例。此解决方案具有更高的速度。是的,它应该更快,因为它不需要将日期值格式化为字符串,将该字符串连接为INSERT语句字符串,然后执行最终字符串。只需将原始日期值直接添加到新行中。OpenRecordset的dbAppendOnly选项也应该有助于提高性能!在这个世界上![日期]=dte声明的意思?当然!用于引用集合的成员。例如,[表格]![表格1]。。。Form1是当前打开的表单集合的成员。在这个回答中![Date]位于With rs块内,因此本质上是rs![日期]。。。嗯,实际上是!![Date]。值自。值是记录集字段的默认属性。我将编辑答案以显式包含.Value,即使它不是必需的..AddNew将新行添加到记录集中。然后[Date].Value=dte将dte变量的当前值加载到该新行的[Date]字段中。最后,.Update将新行保存到源表中。