- ベストアンサー
ACCESSのマスターデータが削除されてしまう。
現在、見積等を作成するためACCESSをWEBで勉強しながら作成している初心者です。 ・商品マスターに色・形状・サイズ・単価が入力済み ・明細テーブルを作成し、色・形状・サイズが入力可能 のように考えております。 ・明細クエリ: サイズ・色・形状(明細テーブル) 単価(商品マスター) を作成し明細クエリから生成したフォームから、色・形状・サイズを入力すると、単価が連動して出力(表示)できるような事を考えているのですが、うまく機能しません。 おそらく下記サイトの4番目に相当すると思い http://www.accessclub.jp/actips/tips_30.htm フォームのレコードセット:ダイナセット(矛盾を許す)にする事で解決いたしました。 そこまでは良かったのですが、入力された明細を削除すると、連動して関連した商品マスターのデータまで連鎖して削除されてしまい困っております。(当然かもしれませんが・・・) 明細削除時はマスターが削除されないような方法はありませんでしょうか。あるいは、他の方法でもかまいません。(明細フォームからはマスターから単価だけ参照する方法など)非常に困っております。何卒よろしくお願い致します。 環境:ACCESS2003 商品データ:現状7万です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
忙しいのでヒントだけ。 コントロールソースに DLookUp 関数を使う。 ヘルプ、過去ログ等で お調べください。
その他の回答 (3)
リレーションが設定されている「明細」だけを削除する方法として、削除フラッグを利用するのは如何でしょうか? 明細テーブルに削除フラッグ(名称は適当に)フィールド(yes/no型)を追加し、規定値をNoにします。 削除時には、フォームに表示した削除フラッグをyesにするか、マクロで書き換え、その後、削除クエリーを作動します。 なおマスターと伝票をクエリーでリンクさせている場合は、フォーム上で各フィールドの「更新の許可」などに細かい配慮が必要でしょう。
お礼
ご回答ありがとうございます。 ご回答の内容とは異なってしまいましたが、Dlookupの利用にて解決いたしました。 貴重なお時間・ご意見を頂きありがとうございました。
- celtJapan
- ベストアンサー率31% (67/211)
なるほど、分かりました。 根本的な部分を間違ってらっしゃいます。 まず、マスターと伝票をクエリーでリンクさせて編集してはいけません。 伝票入力画面において、マスターはあくまでも一方的に参照すべき相手です。selectのなかでjoinしちゃダメです。 伝票を独立させるために、入力フォーム中で、 [色] [形状] [サイズ] と打ち込んだ後に [単価] 項目に移動するようにし、 Focus取得時のモジュールで商品マスターに単価を参照しにいって代入するような書き方をしたほうがいいと思います。 すると、伝票明細はどこともくっついていないので削除しても何の問題もありません。
お礼
ご回答ありがとうございます。ご指摘のとおりjoinしないようリレーションを削除すると、どのように単価を検索すれば良いのかわかりません。単純にリレーション削除してやると当然ですが全単価(約7万アイテム)がセレクトされてしまう状況です。 単価のテキストボックスのコントロールソースどのように設定してやると商品マスターの単価が参照できるのでしょうか。 (コントロールソースではなく、Focus取得時のテキストボックスのValueとして取得?) 色・形状・サイズの情報を利用して商品マスターから単価を取り出す方法(関数かなにか?)をお手数ですが、具体的にお教え頂ければ幸いです。
補足
celtJapan様ご回答ありがとうございました。 Dlookupの利用で解決いたしました。 方向性を考える上で参考になりました。 ありがとうございました。まだまだ作成過程の序盤ですので 色々ご相談する可能性があるかもしれませんが、今後もよろしく お願い致します。
- celtJapan
- ベストアンサー率31% (67/211)
>・商品マスターに色・形状・サイズ・単価が入力済み >・明細テーブルを作成し、色・形状・サイズが入力可能 この二つの関係というか、何をされたいのかをもう少し説明してください。
補足
説明不足(?)で申し訳ありません。 まず、やりたい事ですが、伝票明細の入力フォームを 作成したいと考えております。 ・伝票明細を入力します。 →商品の色・形状・サイズ・その他(量など) ・入力された明細(色・形状・サイズ)から単価が表示されます。 →単価は商品マスターより参照します。 ・入力された情報は明細テーブルに保存されます。 Webなどでは商品コードなど1つの情報で商品名や単価などを商品マスターから参照しているようですが、私の場合は色・形状・サイズの3条件からデータを参照する必要があります。 一応リレーションとしては、 ■明細・[色]→商品マスター・[色] ■明細・[形状]→商品マスター・[形状] ■明細・[サイズ]→商品マスター・[サイズ] ■明細クエリ 明細・[色],明細・[形状],明細[サイズ],商品マスター[単価] 尚、伝票明細の入力フォームは明細クエリを基に作成しております。 不要となった明細を入力フォームから削除ボタン(cCmdDeleteRecord)で削除すると明細テーブルから削除した明細が消えますが、連動して商品マスターのデータまで削除されて困っております。 と言う説明で宜しかったでしょうか。
お礼
ご回答ありがとうございます。 こちらで相談する前にDlookupも検討したのですが、うまく動作せず困っておりました。クエリ(SQL)で解決を考えていたのですが、Dlookupの利用を再びトライし成功しました。 結論としては、ヒントのとおり ・Dlookup利用し、引数に色・形状・サイズを用いて単価を算出させる関数を作成 ・テキストボックスのコントロールソースにその関数を利用 (引数として、入力値(色・形状・サイズ)を渡す。) 以上の操作で、単価算出と、マスターデータの非破壊が実現しました。 ありがとうございました。