- 締切済み
アクセスの自動入力フォームに手動で入力したい
初心者ですが、ネットで調べながらaccess2013で、納品書フォームを作りました。 納品書明細テーブルと商品マスタテーブル(商品コード、品番、単位)を納品書明細クエリで紐づけしてフォームを作成しました。商品コードを入力すると、自動的に品番と単位が入るようになっています。 ここで、商品コードがついていない商品(商品マスタに含まれず、今後登録する予定もない)も品番と単位の欄に手動で入力できるようにしたいのですが、可能でしょうか。 今手動で入力すると「フィールド'商品コード'とキーが一致しているレコードをテーブル'商品マスタ'で探すことができません」とエラーが出てしまいます。 ご教示いただけましたら幸いです。よろしくお願いいたします。
- みんなの回答 (16)
- 専門家の回答
みんなの回答
- chayamati
- ベストアンサー率41% (260/624)
- chayamati
- ベストアンサー率41% (260/624)
こんにちわ 複数のフィールドを主キーすることは出来ても、不都合があり、考えたようには動作してくれません テーブルのデザインを次のように変えて下さい。 ・商品名 ・ID ・S商品名:フィールドプロパティーで重複なし ・Sフリガナ:ルックアップのリスト順の為 ・規格名 ・ID ・S規格名:フィールドプロパティーで重複なし ・Sフリガナ:ルックアップのリスト順の為 ・商品マスタ ・ID ・M品目:テキスト型 重複なし !追加項目です。 VBAでS商品名 & "_" & S規格で計算 するので入力不要、重複なしですのでダブって入力できない ・M商品名ID:長整数型、表題=商品名、商品名をルックアップ ・M規格ID:長整数型、表題=規格名、規格名をルックアップ ・M単位名 ・M基準単価 ・M商品コード:これは不要。ルックアップを使います。 ・納品書明細 ・ID ・納品書ID:長整数型 ・商品マスタID:長整数型、 高度のルックアップ(商品マスタを通して商品名と規格名をルックアップ) ・T納入品名:テキスト型 !T商品名_規格を気分で替えました 商品マスタID(ルックアップ)で確定後 VBAで T納入品名=M品目 とします これがQの課題でしたね 事後 T納入品名は手入力可です。 ・T数量:数値型、規定値=0、小数点以下 ・T単位:テキスト型 ・T単価:数値型、規定値=0、小数点以下 ・T金額:数値型、規定値=0、小数点以下 ・納品書 ・ID ・T納品書No. ・日付:日付/時刻型 ・お客様名:テキスト型、インデックスで重複なし ここは顧客ID(長整数型)かも 各テーブルのIDが全て主キーです。 以上途中報告です 次回、商品マスタM商品名IDと規格IDのルックアップで テーブルの説明を終わります。 主キーのID以外のフィールドの プロパティーの標題は必ず入力しておいてください フォームのデザインで有難いことが起こります。
- chayamati
- ベストアンサー率41% (260/624)
今晩は >結合の種類ですが、「2」ではないでしょうか? 「3」にすると回答2で示していただいた図と矢印の方向が 反対になってしまいます。 ☆どちらがわからないまま マスタテーブルがトランザクションテーブルの 上かと判断しました このように複数のフィールドを持つテーブルは、 実は未体験で曖昧なままの回答になってしまた。 >対象は商品マスタの商品名IDに商品名をルックアップです。 示していただいた図では納品書明細テーブルになっています。 ☆そうですね、すみません添付します (1)ここが空だとボックッス名に:を付けてM商品名ID (2)ルックアップタブをクリックでテキストボックッス を枠右から コンポッボックッスに (3)値集合タイプ (4)連結列 規定値は1ですね、商品名と規格のように複数も可能かも (5)列数IDと商品名の2つ (6)プルダウンリストの表示;見出し入りませんね (7)列幅:IDと商品名の表示幅ID=0:非表示、商品名の幅省略:ボックス幅 (8)リスト行数:16行は変更可 (9)リストの幅をテキスト幅を超えて表示したいとき >リスト行とはドロップダウンリストに表示させる行数のことでしょうか。 ☆エクセルの8行表示と違って行数は任意に設定でき、リスト順も指定できます >商品コードを入力したら商品名が出るようにしたいのですが、 教えていただいている方法はドロップダウンリストから選ぶという方法になりますでしょうか。 ☆コード一覧表を見ながらの入力より、マウス操作の方が楽ですよ コードの管理も必要でしょう 自分はもっぱらフリガナ順です。コードではありませんが使用頻度とフリガナで表示順決めています ルックアップの実体は、クエリですよね
- chayamati
- ベストアンサー率41% (260/624)
今晩は 回答No.3に誤字がありました。誤りは表題 正しくは標題 この回答のキーワードの一つにこのような事があり、ゴメン >「商品マスタ」から「納品書明細」に伸びる矢印はなんでしょうか。どのように操作すればできますか? ☆良いところにお気付きですねきですね 通常IDが主キーなら完全整合性のリレーションシップになるのですが 商品名のインデックスプロパティーを重複なしとしたいのですが、 これをするには規格、サイズ、色柄、品質も商品名に含める必要がります。 そのため参照テーブルを間に入れ、 参照テーブル側でそれぞれの参照名に重複なしにします。 さて、複数のフィールドの組合せを主キー にするには テーブルのデザインモードで 1.フィールドが連続しているとき開始フィードクリック →終了フィールドを右クリック→主キーマークをクリック 2.フィールドがバラバラのとき開始フィードクリック→CTL+次のフィールド… →CTL+終了フィールドを右クリック→主キーマークをクリック リレーションシップは参照整合性受け入れてくれないので 商品マスタのIDはオートナンバー型なので重複なしです 結合の種類で 1.両方のテーブルの結合フィールドが同じ行だけ含める 2.納品書明細の全レコードと商品マスタの同じ結合フィールドのレコードだけを含める 3.商品マスタの全レコードと納品書明細の同じ結合フィールドのレコードだけを含める それぞれどのような不都合が生じるか不明ですが、3.にしています。 --------------------------------------------------------------------------- テーブルのデザインモードでルックアップ定義です 対象は商品マスタの商品名IDに商品名をルックアップです。 商品名IDは長整数型の数値ですが、表示は商品名の文字列です。 テキストボックスを配置すると、 ボックス名がボックスの見出しラベルの標題になります。 この標題枠に「商品名」と入力します。 次に標準タグからルックアップをクリックすると表示コントロルがテキストボックスだけに変わります これの右端クリックからコンポボックスを選びます。 次に空白の値集合ソースの右端の…クリックで、お馴染みのクエリ画面です 同時表示されたテーブル一覧から商品名クリック選択後テーブルの表示を閉じ ID、商品名、Sフリガナを配置、Sフリガナに昇順としクエリビルダを閉じます ルックアップ画面に戻ったら 列数2(IDと商品名)、IDの表示幅0、 リスト行適度、ACCESSの枠を超えてデスクいっぱいに表示します。 因みに私は1000行を超えるマスタテーブルの検索に48行です。 ---------------------------------------------------------------------------- この表示行数の多さとリレーションシップ、オートNo.型の為 煩わしいコード管理から解放されます。
補足
ご回答いただきありがとうございます。 ご指示のとおりやってみました。そのなかでいくつか質問があります。 まず、結合の種類ですが、「2」ではないでしょうか? 「3」にすると回答2で示していただいた図と矢印の方向が反対になってしまいます。 次に >対象は商品マスタの商品名IDに商品名をルックアップです。 とありますが、示していただいた図では納品書明細テーブルになっています。 >この標題枠に「商品名」と入力します。 以下の作業は、商品マスタテーブルに対して行っていいのでしょうか。 それから、 >IDの表示幅0 これは、列幅のことでしょうか。 あと、 リスト行というのはドロップダウンリストに表示させる行数のことでしょうか。 私は、商品コードを入力したら商品名が出るようにしたいのですが、 教えていただいている方法はドロップダウンリストから選ぶという方法になりますでしょうか。 基本的な質問ばかりで恐縮いたしますが、よろしくお願いいたします。
- chayamati
- ベストアンサー率41% (260/624)
お待ちしていました。 少し長いお付き合いになると思います。 テーブルは添付のようなリレーションシップが必要です。 フィールド名の頭ににテーブルの用途によりT,M,Sを付けました T:トランザクションのT M:マスタのM S:なぜか参照のS 各テーブルはID(オートナンバー型)で始ります。 では個別にあたります。 ・商品マスタ ・ID ・M商品名ID:長整数型、表題=商品名、商品名をルックアップ ・M規格ID:長整数型、表題=規格名、規格名をルックアップ ・M単位名 ・M基準単価 ・M商品コード:これは不要。ルックアップを使います。 *このテーブルは他と違って複数フィールドが主キー印ですね 商品を特定する手段です。 サイズID、等級ID、柄IDも必要かもしれません ・商品名 ・ID ・S商品名:フィールドプロパティーで重複なし ・Sフリガナ:ルックアップのリスト順の為 ・規格名 ・ID ・S規格名:フィールドプロパティーで重複なし ・Sフリガナ:ルックアップのリスト順の為 納品書登録時にT商品名_規格=S商品名 & "_" & S規格とする この後手入力可能 ・納品書明細 ・ID ・納品書ID:長整数型 ・商品マスタID:長整数型、高度のルックアップ(商品マスタを通して商品名と規格名をルックアップ) ・T商品名_規格:テキスト型 ・T数量:数値型、規定値=0、小数点以下 ・T単位:テキスト型 ・T単価:数値型、規定値=0、小数点以下 ・T金額:数値型、規定値=0、小数点以下 ・納品書 ・ID ・T納品書No. ・日付:日付/時刻型 ・お客様名:テキスト型、インデックスで重複なし ここは顧客ID(長整数型)かも 今回はここ迄ですが ルックアップ、フォームについてお伝えしたいことがあります。 進捗状況をコメント下さい。
補足
ご回答いただきありがとうございます。 土日は会社が休みの為(家のPCにはアクセスが入ってません)お返事が遅くなりましたことお詫び申し上げます。 基本的なことがわかっていないため私が理解できないのだと思いますが、 回答No.1では、すでに作っている納品書フォームを手直しするだけで可能かと感じましたが、 回答No.2では、最初から作り直したほうがよいように感じまして、少し混乱しております。 とりあえず、ご指示のとおりのテーブルを最初から作ってみました。 そこで質問です。添付いただいた画像にある「商品マスタ」から「納品書明細」に伸びる矢印はなんでしょうか。どのように操作すればできますか? また質問させていただいている身で恐縮ですが、外出も多い仕事のためすぐに進めることができないこともあるかと思いますがお許しいただけましたら幸いです。
- chayamati
- ベストアンサー率41% (260/624)
今晩は VBAは大丈夫ですね 納品書のテーブルに手入力用のフィールドを追加します。 商品マスタの商品コードが確定した時点で 商品マスタの商品名を追加した商品名に貼り付けます。 登録画面には商品名が2つ並ぶことになりますが レポート(納品書)には追加した商品名を使います。 ややこしいですね、 商品マスタの商品コードは主キーですね、 商品マスタ商品名をM商品名、追加した商品名をT商品名とします。 --------------------------------------------------------- Private Sub Mコード_LostFocus() T商品名 = M商品名 End Sub -------------------------------------------------- 尚、T商品名のタブストッププロパティーをいいえにします
- 1
- 2
お礼
ご回答いただきありがとうございます。 最初に書いておけばよかったのですが、商品コードは取引先のほうで発注の際に書いてくださっているので、一覧表を見る必要がありません。そのまま数字を入力するのが一番簡単な方法なのです。 そのため、商品コードの数字を入力したら、品番が自動入力され、コードにない品番は手動で入力する方法を探していました。ドロップダウンリストは品番の性質上使いづらいかと思います。 私のつたない質問に丁寧にお答えくださり、本当にありがとうございました。