マスタデータ更新の方法とは?

このQ&Aのポイント
  • システム開発初心者の方がマスタデータ更新の方法についてアドバイスを求めています。
  • 現在はシステム管理者のみがAccessからマスタデータを更新していますが、リーダークラスの人もできるようにしたいとの要望があります。
  • マスタデータの更新方法として、一時テーブルや変更用テーブルを使用する方法や、フラグを設けてSQL文を発行する方法が考えられますが、どのような方法が適切でしょうか?
回答を見る
  • ベストアンサー

マスタデータ更新

こんにちは。 システム開発の基礎的なところがわからないので、教えていただきたく、投稿させていただきます。 システム開発をほとんどやったことがないので、言葉が変なところもあるかと思いますが、宜しくお願いいたします。 サーバー上に、AというSQLServerのDBがあります。 今までは、システム管理者のみがAccessからA.DBのリンクテーブルを使い、マスタデータの更新/追加/削除を行っていましたが、今後、リーダークラスの人もできるようにしたい!という要望があり、そのインターフェース部分を作成しています。 いろいろと考え、フロントエンド側にAccessでB.mdbを作成し、そこには、A.DBと同じテーブル構造の一時TBLを作成し、B.mdbを開いた時にA.DBから全データを取得することにしました。(取得するところまではできています) ここから、設定するための画面作成をしますが、最終的に、更新/追加/削除されたデータは、どのようにA.DBにUPすればいいのでしょうか? 考えた方法として (1)B.mdb内に、一時テーブルとは別に、更に同じ構造の変更用テーブルを作成。 設定画面から更新/追加/削除されたデータは変更用テーブルに保存し、全ての処理が終了したら、変更用テーブルにあるデータを1つづつ見て、A.DBへ更新/追加/削除をかける (2)一時テーブルのデータを直接更新/追加/削除し、全ての処理が終了したら、全テーブルのレコードを1件づつ比較し、A.DBへ更新/追加/削除をかける というくらいしか思いつかないのです。 その他に思ったのが、一時テーブルもしくは変更用のテーブルに、レコード毎に「更新/追加/削除」がわかるようにフラグを設けて、そのフラグに従ったSQL文を発行する というくらいです。。。 根本的に、マスタデータに対する更新/追加/削除のやり方が間違っていたりしますか? 誰も聞ける人がいないので、どうぞ宜しくお願いいたします!!!

質問者が選んだベストアンサー

  • ベストアンサー
noname#60992
noname#60992
回答No.2

実際に私はあまりこの手のものを作ったことがないのであまり的確なアドバイスにならないかもしれませんが、 何がいつ誰によってどう変更(追加)されたかを知る必要があるなら直接リンクテーブルのデータを変更することはできないと思います。  ログの必要がなければ、それこそリンクテーブルのデータを連結フォームから変えてしまえばよいわけですけど、そうだったらこんな質問は出ないですよね。 >削除は、解除フラグがあるものは解除フラグを立てるだけ これは、実際はマスタの更新なので現実に発生する処理は追加及び更新の2種類と考えてよいと思います。 私が作るなら、 (1)非連結フォームにA.dbよりデータを読み込む仕組みを作り、読み込む際にその内容をログテーブルに保存して (2)フォーム上でマスタデータの変更を行い変更内容をA.dbに書き込むSQL文を作って、ローカルのテーブルに、登録ユーザーIDや変更時刻、 などとともに保存しておき、 (3)sqlを実行させます。  sqlをいれたテーブルと読み込んだデータテーブルがそのままログになります。 アクセスにVBAでたくさん書くことに関しては、ちょっと抵抗があるので可能であればVBなどを使われたほうがちょっと安心できるかもしれません。 アクセスで全部作られるなら、こまめにバックアップを取りながら、、、 あまりVBAで書きたくないなら(クエリなどで片付けたいなら(考えられた方法の(1)とほとんど同じですが、全マスタデータをローカルに持ってくる必要はない。) (1)1マスタデータをB.mdb上の仮テーブル及びログテーブルに読み込み、 (2)連結フォームで変更をさせ、B.mdbのテーブルに保存しておく。 (3)(2)で作ったデータ内容をa.dbに反映させる。 どちらのケースでもフォーム上では新規登録であるかどうかの判断は インデックスになるIDなどを一度マスタテーブルを検索して重複しているデータがあれば更新であるし、新規であれば追加ということになります。

mame-taro
質問者

お礼

ありがとうございます。 せっかくお返事いただきましたのに、私の中でどうも理解できません(;_;) 追加・更新の2種類でOKというのと、全てのマスタエータをローカルに持ってこなくて良い ということは、大変勉強になりました。 ありがとうございますね。 これを頭に入れて、もう少し調べてみることにします。 ありがとうございました!

その他の回答 (2)

noname#22222
noname#22222
回答No.3

スーツのデザイナでプログラマではありません。 ですから、かなりトンチンカンだと思いますが... 1、Accessプロジェクトでなく、なぜ、 mdb なのかと思いました。 2、データベースの管理は、SQL文の発行で全て済ましてしまうが基本と思いますが... 3、テンポラリファイルは SQL Server に作成することも出来るのではないのかなあ・・・ こんな、他愛もない感想を持ちました。

mame-taro
質問者

お礼

s_huskyさんも、ありがとうございます。 基礎がわかっておらず、理解できないため、調べてから、検討させていただきたいと思います。 こういうことをおっしゃっていたのか! と分るようになるといいのですが。。。 勉強不足ですみません。

noname#60992
noname#60992
回答No.1

マスター変更の運用規則というのがどういうものかによりますが、 例えば変更を即座に反映させたいのか、バッチ処理などで決まった時間に反映させるのかによります。 また、変更前のマスターの状態を再現させる必要があるかどうかによってつくりが変わってきます。 あと、現在のマスターに開始日、終了日などのフィールドがあるか教えていただけますでしょうか?

mame-taro
質問者

補足

こんにちは! お答えありがとうございますね。 マスタデータへのデータ登録は、あっても1週間に1回くらいです。(追加したいデータにより、更新/追加/削除にかかわるレコードの数はまちまちです) ローカルPCにてデータを一通り更新し終わったら、すぐにマスタDBへは反映させたいと思います。 (バッチではなく、リアルタイムになるのでしょうか?) マスタDBの設計があまりよくないため(でも、これを直すほどの手間はかけられない)、データの入力(DB構造)を覚えるのに時間がかかりますので、リーダーさんから入力してもらったデータに間違いがないか、最初の頃は、システム管理者がチェックできるようにするかということも悩んでいます。 本来でしたら、A.DBのリンクテーブルをローカルのB.mdbに作成し、直接、更新/追加/削除を行うのが一番簡単なんですが、上記点から、一時テーブルに保存して、変更したところがわかるようにしたいと思います。 (すみません、日本語おかしいかもです。。。) >また、変更前のマスターの状態を再現させる必要があるかどうかによってつくりが変わってきます。 なので、再現させる必要もあるかもしれません。 現在のマスターには、開始日・終了日のフィールドはありません。解除フラグはあります。 ・追加はデータ追加 ・更新(変更)はそのまま変更 ・削除は、解除フラグがあるものは解除フラグを立てるだけ(マスターにより解除フラグがないものもあるので、削除する場合も有9 という感じです。 意味、わかりますでしょうか??

関連するQ&A

  • マスタの更新について

    お世話になります。 マスタを登録・更新するプログラムを作成しています。 入力画面には以下の項目を配置しています。  ・商品コード  ・商品名  ・備考 値を格納するデータベースのテーブルのフィールドは以下の通りです。  ・商品コード  ・商品名  ・備考  ・削除フラグ  ・登録日  ・登録者  ・更新日  ・更新者 ※主キーは商品コードです。 別画面でこのマスタ内容を選択してデータを作成しています。その為、現在は整合性を取るために、マスタを更新する時は商品コードを変更できないようにして更新しています。 ここで皆さんに質問があります。 現在のテーブルにはオートナンバー型のようなフィールドを作成していません。 一般的にこのようなマスタを作成する際はオートナンバー型のようなフィールドを作成するものなのでしょうか。またどのように対応するのが望ましいのでしょうか。 くだらない内容で大変申し訳ありませんが宜しくお願いします。 私の説明で皆さんに伝える事ができたか心配ですがどうぞ、アドバイス等をいただけませんでしょうか。 何卒、宜しくお願いします。

  • accessでレコード更新直後の反映について

    アクセスのレコードの更新直後、他PCから該当レコードを読むと更新が反映されていません。回避方法をお教え下さい。 尚、アクセスの初心者です。 ”データ.mdb”をServerへ置き、複数のPCの”プログラム.mdb”から”データ.mdb”のテーブルをリンクし使用する予定です。 しかし、PC-Aの”プログラム.mdb”でテーブルを更新した直後PC-Bの”プログラム.mdb”からテーブルを読み込むと更新が反映されていません。 しかし、更新後 約2秒以上経過した後に読み込むと更新が反映されています。 試行錯誤しましたが改善しません。 以下に環境を示します。 Access2003で”データ.mdb”と”プログラム.mdb”を作成しAccess2010とAccess2003で使用 T_確認テーブルに”Yes/No型”で”アクセス中フラグ”を設定 ServerとPC-AとPC-BはLANで接続 <プログラム内容の抜粋> Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_確認テーブル", dbOpenDynaset, dbDenyRead) rs.MoveFirst If rs!アクセス中フラグ = True Then ' → または”if rs!アクセス中フラグ Then”でも同じ MsgBox "既に他者が使用", vbExclamation, "入力依頼" else rs.movefirst rs.edit   rs!アクセス中フラグ=True ' フラグをセット rs.update End If db.Close Set db = Nothing

  • データ移行

    システムの再構築でmdb(Access2000)からSQLServer2005とSQLServer2000からSQLServer2005へのデータ移行があります。 データ移行と言いましても、テーブルの構成が変わるため必要な項目と不必要な項目があります。今、考えているのが、一度SQLServer2005へmdbまたは、SQLServer2000と同じテーブルを作成(一時的なテーブル)し、その後、INSERT文で新規テーブルに必要な項目を追加していきたいと思っています。 一時的なワークテーブルを作成する際にmdbからとSQLServer2000からとでい色々な方法があると思うのですが、どの様な方法があり、その方法のメリット・デメリットを知りたいのですが、教えて頂けないでしょうか?よろしくお願いします。

  • MDBファイルのデータ移行

    ACCESSでDB環境を作成してmdbファイルで使っていました。 プログラム変更時にDBにもテーブルの項目をいくつか追加しました。 旧mdbファイルのデータを新mdbに移行したいのですが、ACCESSの無い状態で移行するのは可能でしょうか。 ACCESSは初心者で職場にACCESSが無いため困っています。 何か良い方法は無いでしょうか?

  • アクセスのデータを取り込みたい

    アクセスのデータを取り込みたい アクセスのクエリも理解できない、超初心者です。 db1.mdbのテーブル1のA列B列のデータだけをdb2.mdbのテーブル2に取り込みたいのですが、やり方が分かりません。先輩に聞いたら、マクロを使えば簡単だよ、あとは自分で調べなと言われ、まったく見当がつきません。 どなたかご教授願います。よろしくお願いいたします。

  • テーブルにデータがインポートされたら追加クエリを自動実行出来ますでしょうか?

    初めて質問させて頂きます。 ACCESS2000でA.mdb(ADBとします)とB.mdb(BDBとします)の2つのDBが有るとします。A.mdbに1日に何度かデータがインポートされます。インポートされる際に以前のデータは削除されています。この時、ADBのテーブルにデータがインポートされた時に BDBで追加クエリにて自動実行する事は可能でしょうか? VB関係はまだ知識が乏しい身なので是非可能かどうかお教えを請いたいと思います。又、可能であればその方法もヒント的にでも良いのでお教え頂きたいと思います。何卒宜しお願い致します。

  • AC2000のクエリで重複データから最新のデータだけ抽出したいのですが・・・(2)

    OSWINDOWS98SE AC2000 こんにちは、前回「AC2000のクエリで重複データから最新のデータだけ抽出したいのですが・・・」と言う質問をさせていただいて、教えていただいたSQLを使って色々とやってみたのですがどうしても2番のところで クエリ式'[主索引] delete 既存データA.* from 既存データA inner join 一時テーブル   on 既存データA.主索引 = 一時テーブル.主索引 insert into 既存データA(主索引,更新回数) select 更新データB.主索引'の構文エラー:演算子がありません。 と言うコメントがでてしまいさきに進むことが出来なくなってしまいました。 構文エラー?演算子がありません??他を探してみたのですが乏しい知識の範囲では解決を見つけることが出来ずまた、質問させていただいた次第です。 1番の一時テーブルは作成できるのですが、2番以降がうまくいきません どうかご教授お願いいたします。 1.更新データBから一時テーブルの作成 2.更新されているデータを予め削除する 3.既存データAへ追加データ、更新データをinsert 前回の質問 http://oshiete1.goo.ne.jp/kotaeru.php3?q=155505

  • 「マスタ」と「テーブル」の違いとはなんでしょうか?

    マスタとテーブルの違いについて教えてください。 DBにおける、 「マスタ」と「テーブル」の違いはなんなのでしょうか? 両方とも「テーブル」であるのにも関わらず、 どうしてある特定の「テーブル」には「マスタ」という別名が付けられているのでしょうか? [参考サイト様] ttp://homepage1.nifty.com/silabel/it/master_table.html 下記のような概念の認識、分け方で合っていますでしょうか? ■マスタ  ・DBを使用するに当たって、主体となるテーブルがマスターである。  ・主に他のテーブルに対して、登録・参照処理が行われた場合に、   マスタと位置づけされたDBがWhere条件に入る。  ・システム上で良く使用するDBである。  これらによって「マスタ」と付けられている。 ■テーブル  ・あるDB上の用途によって、ジャンル分けされたデータが格納された情報の箱。  ・リレーショナルデータベースでは二次元の表として扱われる。    テーブルとはDB上でデータを格納する為の箱である。     「マスタ」と「テーブル」の違いについて、このような認識、分け方で合っていますでしょうか?

  • Accessのデータ共有について

    現在社内の顧客管理システムをAccessにて構築しており、データテーブルファイル(mdb)をファイルサーバに置き、クライアントPCはフォームやクエリだけのmdbを使用してテーブルのリンクでデータ共有しています(Accessのデータ分割ツールにてテーブルとフォーム、クエリを分離しただけの状態で運用しています)。これまでは、この状態でも運用出来ていましたが、データ量が多くなるにつれ、段々動作が重くなってきた為、処理速度改善の為に、以下の二案を検討していますが、どちらの案が効果的なのでしょうか? 【案1】 クライアント用mdbファイルに同じテーブル構成の一時テーブルを作成し、mdbファイル起動時と、「更新」ボタンを別途作成し、「更新」ボタンが押下されたタイミングで、ファイルサーバのデータベースからADOにて一時テーブルに全データを読み込む。更新系の処理は、各クライアントの一時テーブルとファイルサーバのデータベースに対して行う。 【案2】 現状フォームの遷移については、 「DoCmd.OpenForm」関数の引数に検索条件を指定する方法で行っている為、この部分を ・ADOにてデータを取得  ↓ ・遷移後のフォームに値をセット と言った処理に変更する。 また、上記以外の方法で何か良い方法がありましたらご指摘頂ければと思いますので、よろしくお願いします。

  • Accessで重複したデータを削除したい。

    AテーブルとBテーブルがあります。AテーブルとBテーブルのフィールド名は同じですがデータはそれぞれ違います。AテーブルとBテーブルにあるデータを一つにまとめたいのですが、その際に、 「AテーブルとBテーブルの間で重複したデータがあるのでそれを削除したい。」のですが、手順としてどのような方法がスマートなのでしょうか。 (1)BテーブルをAテーブルに追加クエリで追加する。 (2)Aテーブルで重複クエリを作成し、重複しているデータを表示する。 ・・・・とここまで考えたのですが重複しているデータをどのように削除していけばいいかわかりません・・・。根本的にやり方が間違っているのでしょうか。どなたか詳しい方、いい方法を教えてください。よろしくお願い致します。