先感谢您的帮助。我对Access,SQL和VBA了解得足以让自己陷入困境。这就是我想要做的。
我想创建一个以特定年份开始的查询,然后列出每年直到当前年份。问题是我希望查询随着时间的推移自动更新。换句话说,开始年份是2009年,我希望我的查询列出2009年,2010年,2011年,2012年和2013年,因为我们目前在2013年。明年,该列表将扩展到包括2014年。我怀疑这个可以在SQL中使用查询,但不确定如何正确编码。
答案 0 :(得分:0)
我敢打赌,这个简单的流程没有简单的解决方案。我们必须使用VBA执行以下步骤:
CREATE Table tblTmpYears (
ID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY,
Year Long
);
在VBA中:
Dim strSQL
strSQL = "CREATE Table tblTmpYears (" _
& " ID COUNTER CONSTRAINT PrimaryKey PRIMARY KEY," _
& " Year Long" _
& ");"
CurrentDb.Execute strSQL, dbFailOnError
INSERT INTO tblTmpYears (year) VALUES (2009);
INSERT INTO tblTmpYears (year) VALUES (2010);
INSERT INTO tblTmpYears (year) VALUES (2011);
INSERT INTO tblTmpYears (year) VALUES (2012);
INSERT INTO tblTmpYears (year) VALUES (2013);
在VBA,5年,即使在我们生命存在100年后仍然有效:
Dim y as long, ymin, ymax, strSQL
ymax = Year(Date)
ymin = ymax - 4
For y = ymin to ymax
strSQL = "INSERT INTO tblTmpYears (Year) VALUES (" & y & ");"
CurrentDb.Execute strSQL, dbFailOnError
Next
SELECT * FROM tblStudents INNER JOIN tblTmpYears
ON tblStudents.Year=tblTmpYears.Year
ORDER BY Year;
在这样的VBA中:
Dim qdf, strSQL
strSQL = "SELECT * FROM tblStudents INNER JOIN tblTmpYears" _
& " ON tblStudents.Year=tblTmpYears.Year" _
& " ORDER BY Year;"
Set qdf = CurrentDB.CreateQueryDef("qrySelTemporary", strSQL)
DoCmd.OpenQuery qdf.Name
在这里,您将获得带有学生列表的查询数据表窗口,它是可打印的。更好的是,您可以将其用作
MyReport.RecordSource = "qrySelTemporary"
在具有精美演示文稿的Access报告中。
DROP TABLE tblTmpYears;
在VBA中:
Dim strSQL
strSQL = "DROP TABLE tblTmpYears;"
CurrentDb.Execute strSQL, dbFailOnError
只有VBA才能完成此任务...而不是单个SQL查询。
答案 1 :(得分:0)
这个怎么样 - 为适当的UNION查询输出SQL的小型VBA函数,然后可以将其指定为组合框的RowSource,用作另一个动态生成的查询中的子查询,或者其他: / p>
Function CreateYearsToCurrentSQL(From As Integer) As String
Dim I As Integer, S As String
For I = From To Year(Date)
If I <> From Then S = S + "UNION "
S = S + "SELECT " & I & " AS Year FROM MSysObjects" + vbNewLine
Next I
CreateYearsToCurrentSQL = S
End Function
FROM MSysObjects
是因为如果不存在FROM
子句,Access会发出无关MSysObjects
子句,并且{{1}}必然是Access上下文中的现有表(如果您愿意的话)但是,将其替换为任何其他表的名称。)
答案 2 :(得分:0)
所以我设法创建了一个可以满足我需要的查询标准。
喜欢(右(年(现在()),2)-3)&amp; “ - ”或喜欢(右(年(现在()),2)-2)&amp; “ - ”或喜欢(右(年(现在()),2)-1)&amp; “ - ”或喜欢正确(年(现在()),2)&amp; “ - ”
感谢大家的努力。