1

我遇到了一个需要更多指导的问题。我有一个表格,允许用户输入开始日期和结束日期来表示合同的长度。我正在使用以下查询来计算每月金额:

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 之外的日期处理方面经验不足查询网格。

无论如何,我一直在阅读有关 DateSerial 函数以查找该月的第一天,但​​是您将如何将其实现为循环以查找接下来 36 个月该月的第一个日期的值并将该日期写入预计日期为 fldDate 和 MonthlyAmount 的表。

对不起,这是一个令人费解的问题。任何建议将不胜感激。提前感谢您的任何指导。

4

1 回答 1

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
于 2012-12-07T04:13:57.033 回答