我遇到了一个需要更多指导的问题。我有一个表单,允许用户输入开始日期和结束日期来表示合同的长度。我正在使用以下查询来计算每月金额:
SELECT t_Actuals.InvoiceAmount,
(DateDiff("m",[StartDate],[EndDate])+1) AS [Contract Term],
CCur(Round(([InvoiceAmount]/[Contract Term]),0)) AS MonthlyAmount
FROM t_Actuals;
我们的副总裁希望在合同期限内(即从开始日期起11个月)预测MonthlyAmount。理想情况下,我想在合同期限内以MM-YYYY(01 / 2012,02,2012)格式分配MonthlyAmount,但是,不可否认,我不熟悉在Access之外使用Access的日期。查询网格。
无论如何,我一直在阅读有关DateSerial函数的信息,以查找该月的第一天,但是如何将其实现为循环以查找下一个36个月的第一个月的值并写入该日期为预计日期为fldDate和MonthlyAmount的表。
对不起,这是一个令人费解的问题。任何建议将不胜感激。提前感谢您的任何指示。
答案 0 :(得分:1)
“一个循环,用于查找下一个36个月的第一个月份的值,并将该日期写入表格,其中投影日期为fldDate和MonthlyAmount ”
考虑到第一个月的开始日期和月数,您可以使用DateAdd()
函数确定需要插入的其余日期。将表作为DAO记录集打开,使用其.AddNew
方法添加行,在字段中指定所需的值,然后调用.Update
来存储行。
听起来像你的挑战是日期片,所以我勾勒出来并离开MonthlyAmount
片段给你完成。
Public Sub LoadMonthStartDates(ByVal pFirstDate As Date, _
ByVal pMonths As Long)
Const cstrTable = "YourTableNameHere"
Dim db As DAO.database
Dim rs As DAO.Recordset
Dim i As Long
Set db = CurrentDb
Set rs = db.OpenRecordset(cstrTable, dbOpenTable, dbAppendOnly)
For i = 1 To pMonths
rs.AddNew
rs!fldDate = DateAdd("m", i - 1, pFirstDate)
'rs!MonthlyAmount = <your calculated amount>
rs.Update
Next
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub