Access 2007预测日期范围

时间:2016-03-22 08:07:58

标签: sql vba access-vba ms-access-2007

我正在寻找关于在我的访问数据库中实现某种预测表单的一些帮助/指导。我想要实现的是用户从下拉列表中选择一个项目(我有),然后选择一个来自&从两个日期选择器到目前为止。选择日期时 - 例如2016年1月 - 2017年1月,数据库将创建12个空白条目,用户可以在每个单元格中输入不同的金额。

数据库具有单个项目可以具有多个日历日期的设置。我尝试在第一个实例中使用交叉表查询,但我很快发现,它是不可更新的。我已经研究过使用'temp'表然后可能使用临时表中的更新函数并插入新记录,但我真的希望有一种更简单的方法..有没有人遇到类似的问题/任何建议最佳方法?

更新: 临时表的表结构(如果这是最好的方法?)看起来像:

理想情况下,如果用户选择1月15日至1月16日的范围,则数据库会“填写”剩余的月份。在db中,表格看起来像:

[Project Id] [Month] [Year]
[1] [1] [2015]
[1] [2] [2015]
[1] [3] [2015]
等。

我不确定如何实现这一点;即选择开始和结束月份,在两者之间创建条目。

2 个答案:

答案 0 :(得分:0)

由于我们必须假设应该保留预测,因此Access中的第一个选择是使用表来保存预测数据。我看不出有什么“更简单的方式”。

答案 1 :(得分:0)

这可能与您的设置不同,但我会创建一个表来永久存储您的所有预测数据。在此图中,我使用以下字段创建了 tblForecast

enter image description here

然后,我创建了一个带有组合框的表单来选择项目,2个文本框提供了From和To日期,然后创建了一个命令按钮来运行一些VBA,这些VBA将创建记录。我描述过。在这些控件下面是一个使用 tblForecast 作为其RecordSource的子表单;这将用于显示表单将创建的记录,并允许用户针对字段 ForecastData1 ForecastData2 放置自己的数据:

enter image description here

这里有关于该命令按钮上的click事件的带注释的VBA代码:

Private Sub cmdCreate_Click()

    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Dim newRecs As Integer
    Dim i As Integer

    ' Open tblForecast so we can add new records to it
    Set db = CurrentDb
    Set rs = db.OpenRecordset("tblForecast")

    ' Find out how many records we need to add based on the number of months between
    ' the From and To dates supplied on the form
    newRecs = DateDiff("m", Me.txtFromDate, Me.txtToDate)

    ' Initialise our counter for the loop
    i = 1

    ' Start a loop that will create a new record for each of the months needed
    Do While i <= newRecs

        With rs

            .AddNew

            ' Pre-poulate the ProjectID, ForecastMonth and ForecastYear fields with
            ' the relevant data
            !ProjectID = Me.cboProject
            !ForecastMonth = Month(DateAdd("m", i - 1, Me.txtFromDate))
            !ForecastYear = Year(DateAdd("m", i - 1, Me.txtFromDate))               

            .Update

            ' Increment the counter before next loop iteration
            i = i + 1

        End With

    Loop

    ' Requery subform to see the new records that have been added
    Me.tblForecast_sub.Form.Requery

    ' Tidy-up memory
    rs.Close
    Set rs = Nothing
    Set db = Nothing

End Sub

因此,如果您提供项目和从和到日期......

enter image description here

...然后单击命令按钮:

enter image description here

VBA代码在提供的From和To日期之间创建每月的记录,并预先填充 ProjectID ForecastMonth ForecastYear 具有适当数据的字段。然后由用户完成剩余的 ForecastData1 ForecastData2 字段。

Here's a link到Access模拟文件,以便您可以仔细查看。