首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Access 2007:向数据库中插入值的交叉表视图

问Access 2007:向数据库中插入值的交叉表视图
EN

Stack Overflow用户
提问于 2012-03-01 21:06:56
回答 1查看 2.3K关注 0票数 2

我被卡住了,需要帮助/建议。我很确定我不是第一个遇到这个问题的人,但我似乎在网上找不到答案。

我们正在从许多工厂收集各种数据。这主要是年度峰值产量等的预测值。这种数据收集每年都会重复。

我们目前在Excel中跟踪此数据,Excel具有以下结构:

代码语言:javascript
复制
Factory | 2010 | 2011 | 2012 | ..
----------------------------------
A       |  20  |  30  |  28  | ..
B       |      |  39  |  55  | ..

在这个例子中,工厂B在2011年才开始生产。如果我们收集额外一年的数据,我们只需添加一列。如果预测数据发生变化,我们只需输入新值并丢失旧值即可。您可以想象这种工作方式有其局限性:对于丢失的数据,表变得相当稀疏。旧值无法追溯。没有对值的来源的引用。

为了满足我们对更好系统的需求,我运用了我古老的数据库知识。在Access 2007中,我创建了以下结构:

表:工厂

代码语言:javascript
复制
FacID |  FactoryName
---------------------
1     |  A
2     |  B

表:来源

代码语言:javascript
复制
SouID | Source    | SourceDate
---------------------------------
1     | DocumentX | Sep. 2009 
2     | DocumentY | Jan. 2010

表:参数

代码语言:javascript
复制
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工作表布局的表单,即:

代码语言:javascript
复制
Factory | 2010 | 2011 | 2012 |
------------------------------
A       |      |      |      |
B       |      |      |      |

当然,此表单将有一些下拉菜单来选择源文档和参数类型(在本例中为“PeakProduction”)。

我的问题是:使用交叉表查询很容易基于数据库中的现有数据创建这样的视图,但是不允许输入新值。我可以做些什么来使其工作,以及如何进行?

我应该重新考虑数据库的设计吗?我应该使用VBA吗?是否将Access数据库与Excel工作表链接?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-02 05:45:02

在处理规范化为表的二维数据时,用户使用Access进行维护是有问题的。我的方法是使用适当的工具来完成这项工作,在本例中,该工具类似于Excel。我有一个数据录入的excel电子表格模板。用户在其中输入数据。然后在VBA中,我将电子表格作为嵌入对象打开,检索单元格内容并将其插入到表中。类似于下面的内容。

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9516758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档