我在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
答案 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
测试如下:
<强>更新强>
如果您需要更新现有的表字段,请使用以下代码:
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
测试如下:
更新前