Access技术求助:如何将计算查询结果值传输至目标数据表
嘿,我明白你在Access里卡壳的地方了——Excel里做起来顺顺当当的事儿,到Access里突然找不到门路确实闹心😅。别担心,这个需求完全能实现,我给你两种靠谱的方法,你可以根据自己的习惯选:
方法1:用追加查询直接写入数据
这是Access里最直观的可视化操作方法,不用写太多代码:
- 首先,先把目标数据表准备好!比如建个叫
DailyStats的表,至少要有两个字段:StatDate(日期类型,用来记录统计的日期)和NewArrivalCount(数字类型,存新到人数)——毕竟光存个4,过几天你肯定忘了这是哪天的数据对吧? - 先确认你的「New Arrivals」查询没问题,它应该返回唯一的数值(就是当日新到的人数)。如果是统计当天
Date in的记录数,它的SQL大概是这样:SELECT Count(*) AS NewArrivalCount FROM Database WHERE [Date in] = Date(); - 接下来创建追加查询:
- 点击Access顶部的「创建」选项卡,选「查询设计」,把你的「New Arrivals」查询添加到设计视图里。
- 点击「查询类型」按钮,选择「追加」,然后在弹出的窗口里选你的目标数据表(比如
DailyStats),点确定。 - 在查询设计网格里,把
NewArrivalCount字段对应到目标表的NewArrivalCount字段;另外,手动加一行,字段栏输入Date(),然后对应到目标表的StatDate字段——这样每次运行查询都会自动记录当天的日期。 - 要是想看最终的SQL,切换到SQL视图,应该类似下面这样:
INSERT INTO DailyStats (StatDate, NewArrivalCount) SELECT Date() AS StatDate, NewArrivalCount FROM [New Arrivals];
- 保存这个追加查询,以后每次需要更新数据的时候,双击运行它就行!嫌麻烦的话,还可以把它绑定到窗体的按钮上,点一下就自动执行。
方法2:用VBA代码实现自动化
如果你想让这个操作自动完成(比如打开数据库就自动统计,或者定时执行),用VBA就很方便:
- 按
Alt + F11打开VBA编辑器,右键点击数据库对象,选「插入」→「模块」,然后粘贴下面的代码:Sub UpdateNewArrivalsStats() Dim db As DAO.Database Dim rs As DAO.Recordset Dim newCount As Integer ' 连接当前数据库 Set db = CurrentDb() ' 从「New Arrivals」查询获取统计数值 Set rs = db.OpenRecordset("SELECT NewArrivalCount FROM [New Arrivals]") ' 判断查询是否有结果,避免空值报错 If Not rs.EOF Then newCount = rs!NewArrivalCount Else newCount = 0 ' 当天没人来的话就存0 End If rs.Close ' 把日期和统计数写入目标表 db.Execute "INSERT INTO DailyStats (StatDate, NewArrivalCount) VALUES (#" & Date() & "#, " & newCount & ")" ' 清理对象,避免内存占用 Set rs = Nothing Set db = Nothing ' 弹出提示,告诉你操作完成 MsgBox "当日新到人数已成功写入统计表!", vbInformation End Sub - 同样要确保目标表
DailyStats的字段类型是对的,然后你可以直接在VBA编辑器里运行这个宏,或者把它绑定到窗体按钮上,甚至设置成数据库启动时自动运行。
小提醒
- 一定要加日期字段!这是统计类数据的基本要求,不然时间久了数据会混乱。
- 如果你的表名、字段名有空格或者特殊字符,记得用方括号
[]括起来,比如[New Arrivals],不然Access会识别错误。 - 要是担心重复写入同一天的数据,可以在追加查询或者VBA里加个判断,比如先检查目标表有没有当天的记录,没有再写入。
内容的提问来源于stack exchange,提问作者Jean-François D'Aragon
相关产品推荐
相关产品推荐

