- PR -

1つの DataSet を3つのテーブルで使えますか

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-10 11:03
WindowsXP VB2005EEでDbはAccess2003を使ってWindowsアプリケーションを作っています。
販売管理のアプリケーションを作成しましたが、完成させてから前年度及び前前年度のデータも1つのアプリケーションで分析したく、全く同じ構造のテーブル
(H16年の販売_16TableとH17年の販売_17Table及びH18年の販売_18Table)をメインメニュー等で
選択し、選択年度の販売管理で使用したい。
この場合1つのDataSetに3つのTableを別々に読込むTableAdapterを用意して使い分ける方法
ができるのでしょうか。又そのほかにどのような方法があるのでしょうか。
よろしくお願いいたします。
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-10 11:21
引用:
One.netさんの書き込み (2008-04-10 11:03) より:
この場合1つのDataSetに3つのTableを別々に読込むTableAdapterを用意して使い分ける方法
ができるのでしょうか。



同じスキーマのシンプルなテーブルを2つ用意し、ミニマムコード (必要最低限のコード) を書いて実際に試してみてください。

引用:
One.netさんの書き込み (2008-04-10 11:03) より:
又そのほかにどのような方法があるのでしょうか。



(たぶん無理だと思いますが) DB に手を入れられるのなら、テーブルは3つではなく1つにして、年度を保持する列を持たせる方がいいかと思います。その方がデータ管理が楽だと思うので。
_________________
C#と諸々
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2008-04-10 12:00
さかもとと申します。

まったく同じレイアウトでテーブル名が別の3つということであれば、SQL文を作っておいてDataAdapter.Fillメソッドで流し込めばいけるかと思います。または1件ずつ追加していくとか。

ただ、TableAdapterはあらかじめ各テーブルとの関連付けが必要なので、作っておいてそれを使いまわすというのは無理じゃないかと。

ただ、可能であればよこけん様がおっしゃるようにレイアウトを修正するほうが良いかと。

_________________
------------------------------------------
拝啓、さかもとと申します♪
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-10 13:09
よこけんさん、さかもとさん、早速の回答ありがとうございました。
私はほとんど出来上がったアプリケーションを変更するのが面倒なので、1つのDataSetに
3つのTableAdapterを用意して使い分けるか、その都度テーブル名を変更してあくまでも
1つのTableAdapterで運用できればと考えました。ただウイザードを使用してTableAdapterを
作ったことしかなく坂本さんの言われるSQL文を作っておいてDataAdapter.Fillメソッドで使い泡けることが出来る者なのかが分らずお尋ねした次第です。
少し実験してみルつもりです。
また、よこけんさんのいわれる「年度を保持する列」を追加してこの年度でフィルタを掛ける方法は
販売Tableに年月日列があり、最も単純で且つ簡単な変更と考えましたが、販売Tableには
伝票NO列を有しており毎年ゼロからスタートさせゼロ番伝票には前年からの繰越数を
設定していますので、この方法も変更が大きくなって島します。
年度切替でテーブル名を変更することなどは出来ないのでしょうか。

さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2008-04-10 13:59
さかもとです。

>>年度切替でテーブル名を変更することなどは出来ないのでしょうか。

細かい部分は端折りますが、既存のテーブル名を変えるより

1:2009年度になる
2:2009年度テーブルを作る(空の)
3:2008年度テーブルの中身を2009年度テーブルにINSERT
4:2008年度テーブルの中身を削除
※この場合元の2008年度テーブルが汎用テーブルみたいなイメージで1年間はこのテーブルにデータを入れてあげる。

のほうが作りやすいかな、と思いました。

_________________
------------------------------------------
拝啓、さかもとと申します♪
よこけん
大ベテラン
会議室デビュー日: 2006/01/31
投稿数: 216
投稿日時: 2008-04-10 14:18
すみません、ちょっと勘違いしてました。
基本的に、さかもとさんのおっしゃる通り無理でした。
# ただ、前年度, 前々年度のテーブルからはデータを取得するだけということならば、クエリの追加で前年度, 前々年度のテーブルに対する SQL を追加してやることができます。

今気づいたのですが、テーブル名に年度が直接含まれているんですね。
で、それを「年度切替でテーブル名を変更」したいと。
(過去2年分のデータだけ保持してそれより前のデータは毎年破棄するということでしょうか。)
毎年度テーブル名を変更していくというのはややトリッキーな試みだと思います。
トリッキーなことをやると後で大変になる可能性が高いです。
今はまだそのような作りになっていないのなら、やめておいた方がいいかと・・・。

引用:

One.netさんの書き込み (2008-04-10 13:09) より:
販売Tableに年月日列があり、最も単純で且つ簡単な変更と考えましたが、販売Tableには
伝票NO列を有しており毎年ゼロからスタートさせゼロ番伝票には前年からの繰越数を
設定していますので、この方法も変更が大きくなって島します。


なぜ変更が大きくなるのか、どのくらいの規模なのかは僕にはわかりませんが、テーブルを一つにすることが可能なら、もう一度検討してみることをお勧めします。

_________________
C#と諸々
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-04-10 17:52
さかもとさん、よこけんさん、大変貴重なご意見ありがとうございました。まず質問に答えます。
1.テーブル名はもともと今年1年分でした。これから前年、前前年分のテーブルを作り
どのように管理しようかと考えれいるところです。
2.過去2年分のみ保持し、それより前のデータは毎年破棄します。
3.毎年度テーブル名を変更は危険が高いとの事、了解しました。
4.販売データはほとんどのフォーム(約30枚)で使用していて変更が大変と考えます

そこで、さかもとさん、よこけんさんのアイデアをいただきファイル名は次のように固定します。
「販売」・・・・システムのDataSetへBindingSourceでLoadされています
「販売-0」・・・本年分の保存Table
「販売-1」・・・前年分の保存Table
「販売-2」・・・前前年分の保存Table
年度の選択処理:洗濯した該当保存Tebleデータを「販売」Tableに全てコピーします

毎年のテーブル更新処理を次のようにします
1.「販売-2」テーブルは、データを破棄し、「販売-1」のデータを全てコピーします
2.「販売-1」テーブルは、データを破棄し、「販売-0」のデータを全てコピーします
3.「販売-0」テーブルは、データを破棄し、「販売」のデータを全てコピーします

ソフト開発は、アイデアや発想の競争みたいですね。おかげさまで以上のように考えましたが、
参考意見をお聞かせいただければ幸いです。

修正:まず質問に答えます。の部分を訂正
修正:「年度の選択処理」を追加しました
[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-10 17:56 ]

[ メッセージ編集済み 編集者: One.net 編集日時 2008-04-10 19:12 ]
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2008-04-10 18:55
さかもとです。

One.netさんが携わっているシステムの仕様とか状況とか把握しているわけではないので、本当に参考程度に。

私が、One.netさんの書かれた内容通り「毎年一定のデータを破棄する」を考慮してもう少し手を加えるのならば、破棄するデータを○○年度の項目と一緒に「破棄テーブル」みたいなものに突っ込んでおくと思います。念のため。

もしも「やはりどうしても削除する」「データ容量に制限があってどうしようもないんだ」のであれば、

1:年度更新をする前に必ずその時点のデータのフルバックアップを取れるようにしておく→いつでもここにデータを戻すことができる。

2:将来的に「前々年」以上前のデータは「絶対に必要ない、約束する」と契約書に記載する。(万が一必要になった場合は1のバックアップから戻すから良い)

としておきます。
小心者なので。





_________________
------------------------------------------
拝啓、さかもとと申します♪

スキルアップ/キャリアアップ(JOB@IT)