我被困住了,需要帮助/建议。我很确定我不是第一个遇到这个问题的人,但我似乎无法在网上找到答案。
我们正在收集许多工厂的各种数据。这主要是每年峰值产量等的预测值。每年都会重复这一数据收集。
我们目前在Excel中跟踪这些数据,其结构如下:
Factory | 2010 | 2011 | 2012 | ..
----------------------------------
A | 20 | 30 | 28 | ..
B | | 39 | 55 | ..
在此示例中,工厂B仅在2011年开始生产。如果我们收集额外年份的数据,我们只需添加一列。如果预测数据发生变化,我们只需输入新值并丢失旧值。您可以想象这种工作方式有其局限性:对于缺少数据,表变得相当稀疏。旧的价值观无法追溯。没有参考值的来源。
为了满足我们对更好系统的需求,我将我对数据库的古老知识运用起来。在Access 2007中,我创建了以下结构:
表:工厂
FacID | FactoryName
---------------------
1 | A
2 | B
表:来源
SouID | Source | SourceDate
---------------------------------
1 | DocumentX | Sep. 2009
2 | DocumentY | Jan. 2010
表:参数
ParID | FacID | SouID | ParamType | Year | Value
------------------------------------------------------
1 | 1 | 1 | PeakProduction | 2010 | 20
2 | 1 | 1 | PeakProduction | 2011 | 30
3 | 1 | 1 | PeakProduction | 2012 | 28
4 | 2 | 1 | PeakProduction | 2011 | 39
5 | 2 | 2 | PeakProduction | 2012 | 55
对于每个新的数据集合,我们只需添加一个新的源文档并附加Parameters表。通过这种方式,我们可以始终恢复到旧数据。此外,如果收集了额外的年份,则无需在任何表格中添加其他列。
虽然实际设置比较复杂,但上面的示例足以说明我遇到的问题:要将数据输入数据库,我希望有一个类似于原始Excel工作表布局的单个表单,即:
Factory | 2010 | 2011 | 2012 |
------------------------------
A | | | |
B | | | |
当然,这个表单会有一些下拉菜单来选择源文档和参数类型(示例中的“PeakProduction”)。
我的问题:使用交叉表查询可以很容易地根据数据库中的现有数据创建这样的视图,但是不允许输入新值。我能做些什么才能做到这一点,以及如何做到这一点?
我应该重新考虑数据库的设计吗?我应该使用VBA吗?将Access数据库与Excel工作表链接?
谢谢!
答案 0 :(得分:0)
如果您正在处理规范化为表格的二维数据,则用户使用Access进行维护是有问题的。我的方法是使用适当的工具,在这种情况下看起来像Excel。我有一个excel电子表格模板用于数据输入。用户将数据输入到该数据中。然后在VBA中,我将电子表格作为嵌入对象打开,检索单元格内容并将其插入表格中。像下面的东西。
dim myRec as recordset
dim xlApp as Excel.application
dim xlWrksht as Excel.worksheet
set myRec=currentdb.openrecordset("NameOfTable")
set xlApp=createobject("Excel.Application")
set xlWrksht=xlApp.Open("PathOfWorksheet").Worksheets( "WorksheetNumber")
myrec.addnew
myrec.fields("NameOfFields")=xlWrkSht.cells(1,"A")
......
myRec.update