通过Access VBA获取当前和以前数据之间的差异

时间:2015-06-02 02:02:35

标签: vba ms-access access-vba

我在MS Access 2010上有一个表,其数据类似于以下内容,包含两列DateLog和GenKW:

DateLog    | GenKW
-------------------
04/28/2015 | 6696.0
04/29/2015 | 6806.0
04/30/2015 | 6921.0
05/01/2015 | 7037.0

我想区分两者并得到类似于的输出:

Date        | GrossKW
--------------------
04/29/2015  | 110.0
04/30/2015  | 115.0
05/01/2015  | 116.0

我是Visual Basic和Access的新手,所以我提出了以下内容,但我在变量'Crnt'上得到Null值错误。任何帮助,将不胜感激。

Option Compare Database

Sub SubPrev()
Dim rsSS As DAO.Recordset, rsPV As DAO.Recordset
Dim Crnt As Long, Prev As Long, Gross As Long

Set rsSS = CurrentDb.OpenRecordset( _
        "SELECT * FROM [tbl_K4_Switchbrd_Log]", _
        dbOpenSnapshot)

Do Until rsSS.EOF
    Crnt = rsSS!Opr_Emp_ID
    Gross = Crnt - Prev
    rsSS.MoveNext
Loop
rsSS.Close
rsPV.Close
Set rsSS = Nothing
Set rsPV = Nothing
End Sub

1 个答案:

答案 0 :(得分:1)

您可以获取已计算日期差异的数据集

试试这个:

Sub SubPrev()
Dim rsSS As DAO.Recordset

Set rsSS = CurrentDb.OpenRecordset( _
"SELECT L.Date_log, " & _
       "(L.GenKW - R.GenKW) AS GrossKW " & _
"FROM tbl_K4_Switchbrd_Log AS L " & _
"INNER JOIN tbl_K4_Switchbrd_Log AS R " & _
"ON L.Date_log = DATEADD('d',1,R.Date_log)", _
        dbOpenSnapshot)

Debug.Print rsSS(0).Name, rsSS(1).Name
Do Until rsSS.EOF
    Debug.Print rsSS(0), rsSS(1)
    rsSS.MoveNext
Loop
End Sub

测试如下:

enter image description here

<强>更新

如果您需要更新现有的表字段,请使用以下代码:

Sub SubPrev()
Dim dbs As DAO.Database, sql$, i&
Set dbs = CurrentDb
sql = "UPDATE (SELECT L.Date_log , ( L.GenKW - R.GenKW ) AS GrossKW " & _
      "FROM   tbl_K4_Switchbrd_Log AS L  INNER JOIN tbl_K4_Switchbrd_Log AS R " & _
      "ON L.Date_log = DATEADD('d', 1, R.Date_log)) as T " & _
      "INNER JOIN tbl_K4_Switchbrd_Log ON tbl_K4_Switchbrd_Log.Date_log = T.Date_log " & _
      "Set Gross = GrossKW"
dbs.Execute sql, dbFailOnError
MsgBox dbs.RecordsAffected & " rows affected "
End Sub

测试如下:

更新前

enter image description here

更新后

enter image description here