如何在MS Access中移动和复制行?

时间:2015-07-06 09:54:40

标签: ms-access

我正在尝试在MS Access中使用以前的句点值进行计算。我的方法是为我正在使用的每个变量创建第二个字段并移动表。

如果我的查询qry1是:

aa   bb   cc
---  ---  ---
12   34   56
78   91   01

我的结果应该是:

aa0  bb0  cc0  aa1  bb1  cc1
---- ---- ---- ---- ---- ----
12   34   56   NULL NULL NULL
78   91   01   12   34   56
NULL NULL NULL 78   91   01

我遇到两个问题:

  1. 我尝试在两个额外查询的顶部和底部添加空行,不知怎的行丢失。
  2. 当我使用JOIN组合这两个查询时,我得到了一个笛卡尔积,即行不是并排的。

1 个答案:

答案 0 :(得分:0)

您正在尝试使用Ms Access,就像使用Excel一样。使用Excel宏+公式可能更容易做到你想要的。

访问的强大之处在于它是一个SQL系统(这就是为什么你在加入时得到笛卡尔积的原因,这就是为什么)这听起来像你想要的那样可以用平面电子表格很容易地完成。如果想要自动化该部分,您可以编写VBA来为您添加行。

如果这没有用,那么可以更详细地描述你真正想要完成的事情。

编辑:

我错过了帖子中你说你正在使用以前的值进行计算的部分。这就是我在单个Access查询中实现的目的:

qry_Data: (based on tbl_Data)

    id   aa   bb   cc   calc
    ---  ---  ---  ---  ---
    01   12   34   56   =Dlookup("aa","tbl_Data","id = " & [id] - 1)
    02   78   91   01   =Dlookup("aa","tbl_Data","id = " & [id] - 1)

作为正常操作的一部分,不应向表中添加列。应设置访问表以保存他们将需要的所有数据(直到您的模型更改)。如果您正在设计访问操作并且它似乎应该添加列,那么您应该添加链接表或使用计算字段。在上面的例子中,字段calc将等于ID#1小于当前记录的记录中的值“aa”。这仅在存在具有该ID#的记录时才有效,因此如果ID号中可能存在间隙,则不应使用此确切方法。由于您说该表是按特定的标准排序的,因此您可能需要使用不同的方法来确定以前的记录。在VBA中实现这一点的一种方法是:

Dim RS as Recordset
Set RS = CurrentDB.QueryDefs("myQuery")
RS.MoveLast
RS.MovePrevious

此时您处于倒数第二个记录,可以使用以下命令访问该记录中的任何值:

RS.Fields("aa")

如果您不确切知道自己要做什么,我就无法提出更具体的建议,除非您熟悉基本的SQL概念,并且您会发现在Access中工作更容易。