ACCESSの初心者です。仕事で商品管理に関するデータベースを作ろうとしています。
フォームで入力すれば、ほかのコントロールにも自動入力されて、そのまま保存される方法を教えてください。
詳しく説明しますと、
商品名の変更点を取引先別に分けて報告書を作れるようにしたいので、報告書作成までの操作手順をできるだけ省略しようと考えています。
そこで、商品名の変更内容は変わらないので、フォームで旧商品名を入力すると、新商品名は自動入力されるようにしたいのです。
フォームの新商品名のコントロールのコントロールソースに =[旧商品名].column(2) と入れてみると表示はされましたが、テーブルの新商品名フィールドには保存されていません。
今回が初めて自分でデータベースを作成するので、よろしくお願いします。
No.3ベストアンサー
- 回答日時:
仕事で使うものであれば使えるものを作るべきだと思いますので、ちょっと先のことに
なるかもしれませんが必ず直面するであろう問題についての解決策というか、
一般的なアドバイスをいくつか、、、
1.商品マスターには世代を作れるようにする。
(商品ID、開始日、終了日などでユニークになるようにする。)
2.商品マスターはマスター管理画面のみから操作する。
3.マスターを登録するときは、登録ボタンを作りそれを押下し、ダイアログで
確認することによって登録されるようにする。
(4.連結フォームはなるべく使わない)
4.についてはそう思わない人も多いと思いますので括弧にしておきました。
このあたりを踏まえてフォームを設計すると、マスター管理画面において、
最低必要なものは
1.マスター項目を表示させるコントロール
2.カナ名称などで対象マスターを検索できる仕組み
3.コントロールに入っている情報をマスターテーブルに登録する仕組み
であると考えます。 普通はADOのコネクションを作り、SQLを使い実現させますが、
アクセスにおいては、クエリと仮テーブルを駆使することによって同じようなことを
することもできます。
ご提示されている問題については、コントロールソースをフォームのコントロールの
データにしているのが原因だと思います。 それを、テーブルのフィールドにし、
何かのイベントで、
texthoge =[旧商品名].column(2)
などと指定して、商品名を入れることはできますが、データ登録のタイミングなどに
ついては配慮が必要です。(このあたりが私があまり連結フォームを使わない理由です。)
No.5
- 回答日時:
>フォームでは旧商品名に入力すると新商品名に対応する商品名が表示されます。
>そのレコードをテーブルで開くと、旧商品名は保存されているのに新商品名は保存されて
>いません。
まず、今のコントロールソースの設定ではこうなってしまいます。
最初初期段階では結構こうやってしまうものです。
テーブル「新商品名」項目に直接値を入れてもフォームには出てきませんよね?。
旧商品名は出るけども。
普通のやり方では、コントロールソースに =[新商品名]としないと
画面での新商品名の値でもってテーブルの新商品名への更新はされません。
そこを=[旧商品名].column(2) としているため保存されないのです。
画面は正しく出ますが・・・。
やりたいことに対して、やっていることが中途半端で間違っているので
今のやり方を修正しなくてはなりませんね。やりたいことは処理は可能です。大丈夫です。
>フォームの新商品名のコントロールのコントロールソースに =[旧商品名].column(2) と入れてみる
これは、
フォーム「新商品名」に「[旧商品名].column(2)」を表示する、の設定であり、
テーブルの「新商品名」に「[旧商品名].column(2)」を設定する、を意味しません。
ここに??が生まれています。
・フォームに「(更新される前の)旧商品名」を表示する項目
・フォームに「(更新される前の)新商品名」を表示する項目
・フォームに「[旧商品名].column(2)」(=更新後の新商品名)を表示する項目
3つ同時にフォームで表示させるにはどうするかを考えてみましょう。
3つめの「更新後の新商品名」表示に対しては「非連結項目」を使うことになります。
ヘルプやサンプルを見て学習しておいてください。
対応としては、
1)旧商品名=テーブルの旧商品名
2)新商品名=テーブルの新商品名(画面上は非表示項目にします)
3)新商品名=[旧商品名].column(2)(非連結項目、画面上は「新商品名」というラベル表示にします)
3つの項目を用意し、
1)が更新されたら、3)の項目の値を2)へ設定する
という動きにします。この動きを理解することです。
マクロの「値の代入」を使います。
No.4
- 回答日時:
>フォームの新商品名のコントロールのコントロールソースに
>=[旧商品名].column(2) と入れてみると表示はされましたが、
>テーブルの新商品名フィールドには保存されていません。
上記のことを参考に類推して、
他のフィールドの値を取り込む一つの案を出してみます。
(1)
テーブルを二つ。
T商品:
商品ID(主キー オートナンバー)
商品名
新商品名
T新規:
商品ID(数値型 一応主キーではないとします)
商品名
(2)
T新規でフォームの新規作成から帳票フォーム
を選択し、作成し、保存します。
(3)
出来たフォームをデザインビューで開き、
商品IDのコントロールをコンボボックスに
変更します。コンボボックスのプロパティ
シートを開き、
列数 3
列幅 2cm,2cm,2cm(幅は適当に)
リスト幅 7cm
に設定します。
(4)
コンボボックスのプロパティシートの
値集合ソースに以下のSQL文を貼り付けます。
SELECT T商品.商品ID, T商品.商品名, T商品.新商品名
FROM T商品;
クエリは作らずに変更のみで保存します。
(5)
コンボボックスのプロパティシートの
更新後処理の右側をクリックし、コードを
選択します。するとコード表が開かれ、
以下のコードが表示されます。
Private Sub tx商品ID_AfterUpdate()
End Sub
このコードの中に以下のコードをいれます。
Me![商品名] = Me![商品ID].Column(2)
このようになります。
Private Sub tx商品ID_AfterUpdate()
Me![商品名] = Me![商品ID].Column(2)
End Sub
保存して閉じます。
Column(2)は新商品を示しています。
これで準備は完了です。
フォームを開き、コンボボックスをクリックして
商品を選択して、フォームのフィールドに商品が
表示され、テーブルに保存されたか確認してください。
サブフォーム形式の場合は、
>Me![商品名] = Me![商品ID].Column(2)
の書き方が少し変わります。
サブフォームを使う場合はまた質問してみて
ください。
何か役に立つ内容であれば幸いですが。
No.2
- 回答日時:
補足されたようですが、相変わらずさっぱり判りません。
>フォームでは旧商品名に入力すると新商品名に対応する商品名が表示されます。
>そのレコードをテーブルで開くと、旧商品名は保存されているのに新商品名は保存されていません。
????
一般的な質問する際のセオリーですが
1.ソフトのバージョンも書く
2.DB関係では、テーブル(名)、フィールド(名前とデーター型)
3.フォームに関する質問ならば、そのフォームに貼り付けたオブジェクトの型(テキストボックス、ラベルetc.)と連結されているならばテーブル(またはクエリ)のコントロールソース
その上で、実行しようとしていることを、判りやすく書いてください。「旧商品名に入力すると新商品名に対応する商品名」と書いて、質問者は判っているのでしょうが「新商品名」も「対応する商品名」も全く判りません。
No.1
- 回答日時:
質問が良く理解できないのですが(^^;
>表示はされましたが、テーブルの新商品名フィールドには保存されていません。
ACCESSでは入力中に直ちにテーブルに保存することをしません。キャンセルできるようにするためです。フォームではレコードセレクタを表示していれば、そこに鉛筆?アイコンが表示されている状態です。レコードを移動するか、マクロで保存を実行するなどでテーブルへの書き込みがされます。ご質問はこういったこととは違うのでしょうか?
この回答への補足
まだまだ知識がなく、的確な説明ができないかもしれません。すみません。
フォームでは旧商品名に入力すると新商品名に対応する商品名が表示されます。
そのレコードをテーブルで開くと、旧商品名は保存されているのに新商品名は保存されていません。
なぜでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- その他(プログラミング・Web制作) パイソンでのプログラミングについて 3 2022/08/11 20:31
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Excel(エクセル) Excel 関数 vlookupなどの使い方について質問です。 シート1に品番、商品名、単価、発注条 6 2022/06/15 19:16
- Excel(エクセル) ピボットテーブルの表示変更の仕方 初心者なので、的外れな質問だったらすみません 受注日ごとに商品名と 1 2022/04/26 23:23
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- その他(データベース) accessについて 2 2022/05/31 16:58
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
選択したチェックボックスのみ...
-
アクセスのフォームのビューが...
-
Accessのフォーム上にレコード...
-
「メソッドまたはデータメンバ...
-
Accessフォームのテキストボッ...
-
ACCESSのフォームからデータの...
-
Access runtimeでテーブル、ク...
-
Access 別フォームへの再クエ...
-
Access2002 フォームを閉じるた...
-
ACCESS レポートへの表示・非表示
-
フォームを削除するVBA
-
dlookup関数が使えない
-
ACCESSでのテキストボックスの...
-
ACCESS2013で一部に四角枠をか...
-
AccessのCtrl+2の操作を自動化...
-
Access フォーム上でコンボボッ...
-
アクセスでテーブルの変更内容...
-
アクセスでのチェックリスト
-
ACCESSで議事録を作りたいので...
-
アクセス非連結フォームのテキ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのフォーム上にレコード...
-
ACCESSのフォームからデータの...
-
アクセスのフォームのビューが...
-
選択したチェックボックスのみ...
-
アクセスでテーブルの変更内容...
-
accessの自動更新処理をできな...
-
Access 別フォームへの再クエ...
-
アクセスでの項目追加について...
-
Accessフォームのテキストボッ...
-
ACCESSで入力フォームをHTMLフ...
-
Access2002 フォームを閉じるた...
-
Access フォーム上でコンボボッ...
-
「メソッドまたはデータメンバ...
-
ADOでRecordsetオブジェクトを...
-
テキストボックス(アクセス)内...
-
Accessのフォームで作業領域を...
-
Accessのフォームに表示...
-
アクセス 0以外をカウントす...
-
テキストボックスの値をテーブ...
-
ACCESSで、フォームのレコード...
おすすめ情報