2012-03-01 16 views
2

私は立ち往生して助けを必要とする/助言する。私はこの問題に遭遇する最初の人ではないと確信していますが、Web上で答えを見つけることはできません。Access 2007:データベースに値を挿入するクロス集計ビュー

私たちは多くの工場からすべての種類のデータを収集しています。これは主に、年間ピーク生産量などの予測値です。このデータ収集は毎年繰り返されます。

我々は現在、以下の構造を有しているエクセル、このデータを追跡:この例の工場Bでは

Factory | 2010 | 2011 | 2012 | .. 
---------------------------------- 
A  | 20 | 30 | 28 | .. 
B  |  | 39 | 55 | .. 

を、我々はさらに1年間のデータを収集する場合だけで年間2011年に生産を開始し、我々は、単に列を追加するだけです。予測されるデータが変更された場合、新しい値を入力して古い値を失うだけです。この作業方法には限界があると想像することができます。欠落しているデータのためにテーブルが希薄になります。古い値は追跡できません。値のソースへの参照はありません。

私はより良いシステムの必要性を満たすために、私はデータベースに関するアンティークの知識を有効にしました。

表:工場

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 

我々はAccess 2007では、私は次の構造を作成しました新しいソースドキュメントを追加し、Parametersテーブルを追加します。このようにして、古いデータにいつでも戻すことができます。さらに、追加年を収集する場合、テーブルに列を追加する必要はありません。

実際の設定はもっと複雑ですが、上記の問題を説明するのに十分です。データをデータベースに入力するには、元のExcelシートレイアウトに似た単一のフォームを作成したいと思います。すなわち:もちろん

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

を、このフォームは、ソース文書およびパラメータの型(例では「PeakProduction」)を選択するために、いくつかのドロップダウンメニューがあります。

私の質問:クロス集計クエリでは、データベース内の既存のデータに基づいてそのようなビューを作成するのは簡単ですが、新しい値を入力することはできません。この仕事をするために私は何ができますか?

私のデータベースの設計を再考する必要がありますか?私はVBAで作業する必要がありますか? AccessデータベースをExcelシートにリンクしますか?

ありがとうございます!

+0

それは、任意のデータベースのフロントエンドでExcelから何かを複製することをお勧めなることはほとんどありません、しかし、ここで1つの考え方は次のとおりです。http://wiki.lessthandot.com/index.php/Crosstabs,_forms_and_updating – Fionnuala

+0

クロス集計クエリはデータ入力を許可するものではありません。通常、複数のテーブルからのビューがあり、すべてのインデックスなどを満たす必要があります。また、1つのクロス集計クエリ内にすべてのテーブルフィールドを表示しないようにしてください。 –

+0

あなたはそのリンクを提供するためにレムウーです。それは私の質問のためのエレガントなソリューションを示しています....それは手で限られたデータセットを入力するために正常に動作します。しかし、Excelデータシートの大きなデータセットをAccessフォームにコピー/ペーストすることは困難ではないようです。 – Rutger

答えて

0

テーブルに正規化された2次元データを扱う場合、ユーザーがAccessを使用して維持することは問題です。これに私のアプローチは、この場合は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 
+0

ありがとう、クリス、私は今あなたのソリューションを実装しています。それは有望で、最善の方法のようです! – Rutger

関連する問題