我有一些大型数据集。这就是为什么在导入时,它们会按年份自动分成表格。
EX:数据来自2014年,它进入表格" 2014" 如果数据来自2013年,它将进入表格" 2013",它们都是独立的。如果该表不存在,则会创建该表,并且还会插入" 2014"在tblYears中跟踪已创建的表。
我的问题:我试图让用户能够查找数据的日期范围。所以也许有人希望看到数据跨越2013年2月到2015年3月。
所以我确信我可以找到一个带有WHERE子句的SQL查询,只查找用户给出的日期范围内的数据,但是如果日期范围跨越多年,我的问题就出现了。如何告诉SQL语句包含所有表?我们假设某人的日期范围为2013年,2014年和2015年。如何确定(可变地说)它可以包含FROM中的所有表格?
答案 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
查询作为搜索的基础。
当然,只需将数据放在一个表中,这将会更加昂贵。这是最佳解决方案。