• ベストアンサー

ACCESSで他のデータベースと不一致を探したい

ACCESSで見積を作っています。 パソコンAの見積テーブルとパソコンBの見積テーブルを比較し、 パソコンBにパソコンAの見積データを移行させたいのですが。 比較対象は見積No1というコード。 Aでは1A、2A、3A… Bでは1B、2B、3B… となっており、 不一致クエリ、差分を追加すれば、 Bには、1B、2B、1A、3Bと、Aのデータもまとめられると思ったのです。 ただ、問題は、AとBは別のパソコン。 不一致クエリ、ネットワーク上のを探せない。 アドバイスお願い致します。

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

  • ベストアンサー
  • chayamati
  • ベストアンサー率41% (260/624)
回答No.5

回答No.4の続きです  ミスデータの対策は情報処理の上流(入口)で組込むのが最善です。  流れは、各担当者→副パソコンに入力→主パソコン  1.各担当者やるべきこと   見積No.の管理    現状は主となる人が管理しているのではないでしょうか その人に何か不都合が起きた時流が止まってしまいます。    各担当者に見積No.の管理をゆだねる為の    社員No.(5桁)-連番(3桁)の8桁     社員No.を入社年+100の下3桁と連番3桁6桁    社員No.は人事部等で既に管理されていればそれを流用します  2.副パソコンに入力   入力利用者の負担軽減  2.1.Excel 各種対策をされていると思いますので省略です  2.3.Access  2.3.1.テーブルデザイン     ・数値・文字列・日付・時刻の区分・定型入力・規定値・入力規則     ・重複の有無・自動フリガナ・住所入力支援・テーブルルックアップ  2.3.2.フォームデザイン     ・単票/帳票の区分のほか2.3.1の機能が引き継がれ     ・レコードロック・タブ移動順・タブストップ     ・ヒントテキスト・縦書き・イベントでVBA起動  ----------------VBA起動---------------------  Private Sub 単価_Exit(Cancel As Integer)   金額=数量*単価  End Sub  ----------------------------------------    3.主パソコン   主ファイルのインポート   複数の副パソコンで作成された情報をインポートですが   インポート後情報に抜けがあり、追加して再度インポートすると   見積Noが重複なしの為追加情報だけが受け入れられ、複分は跳ねられます  4.リレーションシップ   これはExcelにない大変有効なツールです   今回はユニークな見積No.に1レコードとなっていますが   このような見積書は見たことがありません   コンビニのレシートですら一かご分の商品がリストされています。   もしかして今のExcelのデザインは   見積書は伝票の上辺部分に見積No.に続いて各種標題項目があり   下辺に品名、数量、単価、金額、原価欄の行が複数ある通常の見積書   これだとSheet数、ファイル数が増え続けますね、   情報の統合管理も難しいですね。   Accessだと1つでファイルも数年は増やす必要もないでしょう   テーブルの組み合わせは回答No.2の添付図から少し変わります。   顧客マスタ、商品マスタへは項目の追加してもリレーション繋がりで   参照できます   なら上辺を見積書テーブル下辺を見積書明細テーブルに展開して   両テーブルに見積No.を配置しリレーションします   見積書の見積No.主キーかインデックスプロパティーで重複なしにします     

hiro1190
質問者

お礼

お返事が遅くなり申し訳ございません。EXCELの見積に関してはそうです。上にお客様名や合計金額記載。下の方に、その合計に至るまでの過程、1.A 1こ 100円 2.A交換 300円ような感じです。(原価はもちろんのせず)さらに、本来は、それが表紙で、明細が別紙に。A交換に関して、 〇〇作業 100円 B作業 200円みたいになっています。質問用に簡略化していますが、もっと複雑な構造です。そして、ACCESSに関して。上のような表たしかにそんな感じにするのですが、うーん、見積Noをそうですね、歯抜けでもいいなら、いけるのか。12月に入りドタバタしてしまって、検証しようと途中のまま時間が過ぎてしまいました。最後までできず申し訳ございません。いったん締めさせていただいて、自分でじっくりいじってから再度質問あげる形にしようと思います。お手数おかけしました。ありがとうございました。

その他の回答 (4)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.4

補足有難うございます。 背景はある程度理解できましたが、小手先の修正では解決できません。 失礼ながらAccessはExcelの延長線上にあると考えておられるのではないですか 体系化されたリレーショナルデータベースと表計算ソフトの決定的な違は テーブルとリレーションシップと言って良いでしょう Accessのテーブルのフィールド毎にその一つが重複なしです  この重複なしを利用することで、今回の課題の一つが解決します またテーブル自体に並び換え、フィルタ機能が備わっています テーブルを開いてフィールド名の右端のVマークからご確認ください テーブルとリレーションシップをスルーする訳にはいきません この設計の見直しの為、仕切り直ししませんか 主体となるPCのAccessファイルに他のPCの情報を追加する 他のPCネットワーク環境にあれば、主体となるPCのAccessファイルに入力可能かと 1.見積テーブル  見積No--数値(社員No.&4桁の連番)  積算日--日付  見積先CD--数値  社員No.--数値  社員テーブルをルックアップ 標題を社員名とする ※1  見積額--通貨  記号-----短いテキスト    これには引合、見積、再見積、受注、納入、キャンセル等の進捗  原価ID--数値    見積額に対する原価なら原価額、データ型も通貨が自然かと 2.社員テーブル  社員No.--入社年の下2桁+3桁の連番(または入社年+100の下2桁)  社員名--短いテキスト

  • kkkkkm
  • ベストアンサー率66% (1733/2603)
回答No.3

> んー、ネットワーク上のACCESSへは追加できないんですかねぇ。 できないのかもしれませんね。ネットワーク環境がないので残念ながら試せません。 他の方への補足を見たのですが、今から見積書のシステムを作成するのでしょうか。別々のファイルを作成するより、テーブルだけのファイルを一つ作ってあとはリンクテーブルにしてフォームやクエリのあるファイルを別途作成しておけばファイル間でのクエリを実行する必要がないと思いますが…。

hiro1190
質問者

お礼

お返事が遅くなり申し訳ございません。リンクテーブルというのを使ったことがなく、今回、初めてさわってみたのですが、たしかに、リンクテーブルにて相手のテーブルと直接クエリが組めるという点がいいなと思いました。不一致クエリそれだとできたのです。テーブル1つを使いまわしっていうのは、同時に見積をそれぞれ作ることがあるので難しいのですが、リンクテーブルの有効活用はしたいと思っています。アドバイスありがとうございました。

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.2

補足願います 1.テーブルのフィールド名とリレーションシップ  私なら見積書のテーブル構成は  1.見積書 2.見積書明細 3.顧客マスタ 4.商品マスタ  の4つのテーブルで添付のようなリレーションシップを想定します 2.主キーのフィールドはありますか  添付画像では🔑マークが付いています   レコードの追加、削除は出来ますがフィールドの更新は出来ません 3.見積No1は主キーですか 4.確認です  パソコンAの見積テーブルとパソコンBの見積テーブルは  同じフィールド構成ですね

hiro1190
質問者

補足

1.見積テーブル 記号-----短いテキスト 積算日--日付 見積No--数値 見積先CD--数値 担当--短いテキスト  担当者テーブルとリレーションシップ ※1 見積額--通貨 原価ID--数値 見積No1--短いテキスト ※2 ※1 担当者テーブル 担当ID--短いテキスト   主キー設定 担当者--短いテキスト 担当テーブル--短いテキスト ※2 そもそもというのか、見積No1:[担当テーブル]&[見積No]という項目です。 こちらは、更新クエリにてデータ追加しています。 2.3 主キーはありません 4 パソコンA、Bは同じです。 事情補足。 現在、AとBは個々に見積を作成。EXCELにて。 見積Noをノートで管理。番号かぶらないようにしている。 EXCELなので、Aで作ったものをコピーし、Bのパソコンへ入れておけば、 BはAのも勝手に変更できる。 それを見積をACCESSにて作る方法にかえたい。 その場合、AとB 各自見積テーブル。サブフォーム見積明細テーブルという形。 明細とは見積Noで結合。そっちも更新クエリで見積No1項目。 各自にしたのは、同時間帯に見積を作ることが多いため。 AのデータをBが変更できるようにするため、 見積No1という項目で他者との区別化をはかり、AのデータをBに追加できたらな、と。 ごめんなさい、まだ試している途中でそれでうまくいくのかも未知数なのですが。

  • kkkkkm
  • ベストアンサー率66% (1733/2603)
回答No.1

ネットワーク環境がないので適当な回答になりますが、リンクテーブルにしてできないという事なんですよね。BにAのテーブルをインポートすればいかがでしょう。

hiro1190
質問者

補足

Private Sub コマンド79_Click() Dim SQL As String SQL = "INSERT INTO 見積 ( 記号, 積算日, 見積先CD, 担当, 見積額, 原価書ID, 見積No1) IN '\\(外付け)\(人の名前)\(フォルダ名)\売上管理ためし用.accdb'" SQL = SQL & "SELECT 見積.記号, 見積.積算日, 見積.見積先CD, 見積.担当," SQL = SQL & " 見積.見積額, 見積.原価書ID, 見積.見積No1 FROM 見積 " SQL = SQL & "where (((Exists (SELECT 1 FROM '\\(外付け)\(人の名前)\(フォルダ名)\売上管理ためし用.accdb'.[見積]" SQL = SQL & "WHERE '\\(外付け)\(人の名前)\(フォルダ名)\売上管理ためし用.accdb'.[見積].[見積No1]=[見積].[見積No1]))=False));" MsgBox "処理完了!" End Sub エラー出ないけど、追加もされません。 んー、ネットワーク上のACCESSへは追加できないんですかねぇ。

関連するQ&A

専門家に質問してみよう