我正在寻找关于在我的访问数据库中实现某种预测表单的一些帮助/指导。我想要实现的是用户从下拉列表中选择一个项目(我有),然后选择一个来自&从两个日期选择器到目前为止。选择日期时 - 例如2016年1月 - 2017年1月,数据库将创建12个空白条目,用户可以在每个单元格中输入不同的金额。
数据库具有单个项目可以具有多个日历日期的设置。我尝试在第一个实例中使用交叉表查询,但我很快发现,它是不可更新的。我已经研究过使用'temp'表然后可能使用临时表中的更新函数并插入新记录,但我真的希望有一种更简单的方法..有没有人遇到类似的问题/任何建议最佳方法?
更新: 临时表的表结构(如果这是最好的方法?)看起来像:
理想情况下,如果用户选择1月15日至1月16日的范围,则数据库会“填写”剩余的月份。在db中,表格看起来像:
[Project Id] [Month] [Year]
[1] [1] [2015]
[1] [2] [2015]
[1] [3] [2015]
等。
我不确定如何实现这一点;即选择开始和结束月份,在两者之间创建条目。
答案 0 :(得分:0)
由于我们必须假设应该保留预测,因此Access中的第一个选择是使用表来保存预测数据。我看不出有什么“更简单的方式”。
答案 1 :(得分:0)
这可能与您的设置不同,但我会创建一个表来永久存储您的所有预测数据。在此图中,我使用以下字段创建了 tblForecast :
然后,我创建了一个带有组合框的表单来选择项目,2个文本框提供了From和To日期,然后创建了一个命令按钮来运行一些VBA,这些VBA将创建记录。我描述过。在这些控件下面是一个使用 tblForecast 作为其RecordSource
的子表单;这将用于显示表单将创建的记录,并允许用户针对字段 ForecastData1 和 ForecastData2 放置自己的数据:
这里有关于该命令按钮上的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
因此,如果您提供项目和从和到日期......
...然后单击命令按钮:
VBA代码在提供的From和To日期之间创建每月的记录,并预先填充 ProjectID , ForecastMonth 和 ForecastYear 具有适当数据的字段。然后由用户完成剩余的 ForecastData1 和 ForecastData2 字段。
Here's a link到Access模拟文件,以便您可以仔细查看。