【问题标题】:Access 2007 Forecasting Date range访问 2007 年预测日期范围
【发布时间】:2016-07-09 00:39:32
【问题描述】:

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

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

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

理想情况下,如果用户选择从 1 月 15 日到 1 月 16 日的范围,那么数据库会“填充”剩余的月份。在数据库中,表格将如下所示:

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

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

【问题讨论】:

  • 这个问题可能有点过于宽泛,无法得到体面的答案。另外,如果你想实现一个表单,你有没有尝试过任何关于表单的事情?您说您希望表单在您的数据库中创建空白条目,然后说数据库设置为单个项目可以有多个日历日期 - 可能提供一些虚拟数据,以便我们可以看到这些数据的结构。
  • 您好,感谢您的回复。我明白为什么它可能有点过于宽泛了。我已更新问题以包含特定问题
  • 谢谢,这很有用。我提供了一个可能会给出一些想法的答案。

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


【解决方案1】:

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

然后,我创建了一个表单,其中包含一个用于选择项目的组合框、两个文本框以提供从和到日期,然后是一个命令按钮来运行一些 VBA,该 VBA 将按照您的描述创建记录。这些控件下方是一个子表单,它使用 tblForecast 作为其RecordSource;这将用于显示表单将创建的记录,并允许用户将自己的数据放在字段 ForecastData1ForecastData2

这是该命令按钮上单击事件的带注释的 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

所以,如果您提供一个项目以及起止日期...

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

VBA 代码在提供的 From 和 To 日期之间为每个月创建一条记录,并预填充 ProjectIDForecastMonthForecastYear具有适当数据的字段。然后由用户完成剩余的 ForecastData1ForecastData2 字段。

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

【讨论】:

  • 太棒了!太感谢了!今天早上我会试试这个,让你知道我的进展如何。非常感谢您的帮助!
  • 非常感谢,这正是我们所需要的。感谢您也为 VBA 提供 cmets,非常感谢
  • 很高兴有帮助:)
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-07-23
    • 1970-01-01
    • 2018-06-02
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    相关资源
    最近更新 更多