Access 2007: представление кросс-таблицы для вставки значений в базу данных - PullRequest
2 голосов
/ 01 марта 2012

Я застрял и мне нужна помощь / совет. Я почти уверен, что я не первый, кто сталкивается с этой проблемой, но я не могу найти ответ в Интернете.

Мы собираем все виды данных со многих фабрик. В основном это прогнозные значения годового пика производства и т. Д. Этот сбор данных повторяется каждый год.

В настоящее время мы отслеживаем эти данные в 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

Для каждого нового сбора данных мы просто добавляем новый исходный документ и добавляем таблицу параметров. Таким образом, мы всегда можем вернуться к старым данным. Кроме того, если собраны дополнительные годы, нет необходимости добавлять дополнительные столбцы в какую-либо таблицу.

Хотя фактическая установка более сложна, приведенных выше примеров достаточно, чтобы проиллюстрировать проблему, с которой я сталкиваюсь: для ввода данных в базу данных я хотел бы иметь одну форму, которая напоминает исходную схему листа Excel, т.е. :

Factory | 2010 | 2011 | 2012 |
------------------------------
A       |      |      |      |
B       |      |      |      |

Конечно, эта форма будет иметь выпадающее меню для выбора исходного документа и типа параметра (в примере «PeakProduction»).

Мой вопрос: с помощью перекрестных запросов легко создать такое представление на основе существующих данных в базе данных, однако ввод новых значений недопустим. Что я могу сделать, чтобы сделать эту работу, и как?

Должен ли я пересмотреть дизайн моей базы данных? Должен ли я работать с VBA? Связать базу данных Access с таблицами Excel?

Спасибо!

1 Ответ

0 голосов
/ 02 марта 2012

Когда вы имеете дело с двумерными данными, которые нормализованы в таблицу, для пользователя проблематично поддерживать использование 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 
...