使用SQL语句的可变日期范围数据集?与MS Access表一起使用

时间:2014-06-03 19:29:25

标签: sql vba ms-access

我有一些大型数据集。这就是为什么在导入时,它们会按年份自动分成表格。

EX:数据来自2014年,它进入表格" 2014" 如果数据来自2013年,它将进入表格" 2013",它们都是独立的。如果该表不存在,则会创建该表,并且还会插入" 2014"在tblYears中跟踪已创建的表。

我的问题:我试图让用户能够查找数据的日期范围。所以也许有人希望看到数据跨越2013年2月到2015年3月。

所以我确信我可以找到一个带有WHERE子句的SQL查询,只查找用户给出的日期范围内的数据,但是如果日期范围跨越多年,我的问题就出现了。如何告诉SQL语句包含所有表?我们假设某人的日期范围为2013年,2014年和2015年。如何确定(可变地说)它可以包含FROM中的所有表格?

1 个答案:

答案 0 :(得分:0)

每次用户打开数据库时,您都可以创建相关年份的查询。这样,如果添加年份,它总是在那里。并且由于每次打开文件时都会删除/重新创建它,因此它始终是最新的。

这样的东西
Dim db As DAO.Database
Dim qNewUnion As DAO.QueryDef
Dim rsYears As DAO.Recordset
Dim sqlUnion As String, unionAllString As String, unionQueryName As String

unionQueryName = "AllResultYears"
unionAllString = " Union All "

Set db = CurrentDb
Set rsYears = db.OpenRecordset("Your years Table")

'make all your union sql using relevant years
Do While Not rsYears.EOF
    sqlUnion = sqlUnion & vbNewLine & " Select * from Results_" & rsYears("Year") & unionAllString
    rsYears.MoveNext
Loop
rsYears.Close

'lop off that trailing Union All
sqlUnion = Left(sqlUnion, Len(sqlUnion) - Len(unionAllString))

Set qNewUnion = New QueryDef
qNewUnion.SQL = sqlUnion
qNewUnion.Name = unionQueryName

'delete this query if it already exists
On Error Resume Next
db.QueryDefs.Delete unionQueryName
On Error GoTo 0

'add your new query
db.QueryDefs.Append qNewUnion

然后您使用此AllResultYears查询作为搜索的基础。

当然,只需将数据放在一个表中,这将会更加昂贵。这是最佳解决方案。