MS Access根据其ID将查询结果添加/更新到现有表

时间:2015-08-01 08:33:51

标签: ms-access sql-update ms-query

我按照其他人的提示来制作访问查询。

我有两张桌子。见图1。结果如图2所示。

如图一 http://img.libk.info/f1.png http://img.libk.info/f1.png

Figure2 http://img.libk.info/f2.png http://img.libk.info/f2.png

生成结果查询的方法在another question中解决。

查询脚本:

TRANSFORM Nz(Count([number]),0) AS CountValue
SELECT Table1.ID
FROM Table1, Table2
WHERE (((Table2.number) Between [table1].[start] And [table1].[end]))
GROUP BY Table1.ID
PIVOT DatePart("yyyy",[ndate]);

我的问题是:

无论如何都要将查询结果写回表1?

我想在表1中添加两个新列。并且能够根据其" ID"将查询值添加或更新到字段库。

我不确定我的描述是否清楚。希望您能理解并感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您将无法直接执行此操作。但是,这有两种方法可以间接完成。

方法1:临时表

此方法最适合快速而肮脏的一次性解决方案。

  1. 根据您的查询创建一个Make-Table查询,并使用它来创建一个临时表。
  2. 使用加入[表1]的临时表更新您的两个新字段。
  3. 删除临时表
  4. 方法2:VBA例程

    当您需要可重复的方法时,此方法最佳。如果你只打算做一次就太过分了。但是,如果您想要每年的计算值,则需要再次运行它。

    1. 将查询读入记录集
    2. 循环遍历Recordset和每个ID
      • 运行sql语句以更新表1或
      • 打开第二个记录集,按ID和编辑/更新
      • 查询
    3. 这是一个更新一年价值的简单版本。

      Public Sub UpdateAnnualTotal(ByVal nYear As Long)
          Dim db As DAO.Database
          Dim rs As DAO.Recordset
          Dim sSQL As String
          Dim sId As String
          Dim nTotal As Long
      
          Set db = CurrentDb
      
          sSQL = "SELECT [ID],[" & nYear & "_count"] FROM AnnualTotalsQuery"
          Set rs = db.OpenRecordset(sSQL)
          With rs
              Do Until .EOF
      
                  sId = .Fields("ID").Value
                  nTotal = .Fields(nYear & "_count").Value
      
                  sSQL = "UPDATE [Table 1] SET [" & nYear & "_count"] = " & nTotal  _
                      & " WHERE [ID] = '" & sId & "'"
      
                  db.Execute sSQL
      
                  .MoveNext
              Loop
      
              .Close
      
          End With
      
      End Sub