
Access2002 レコード入力時に更新/追加を判別できないでしょうか?
わかりにくくてすみません。
現在、簡単な従業員データベースを作っています。
テーブルは2つだけです。
T_基本データ
・従業員番号=主キー
・氏名
・カナ
T_付属データ
・従業員番号=主キー
・職位
だけです。
本来ならば、1つのテーブルでいいのですが、T_基本データのみ、他部署からMDBで送られてくるため、そのMDBの内容、構成は変更できない(頻繁に送られてくるため、いちいち弊部署にマッチした構造に変換する暇が無い)ため、リンクテーブルにしており、弊部署で必要な付属データを別テーブルにし、従業員番号でリンクしている状態です。
フォームは2つ作っており、1つはT_基本データと、T_付属データを一まとめにして表示できるようになっています。付属データが存在しない場合は、該当項目のテキストボックスは空白です。また、従業員番号や氏名で検索(フィルタ)できるようにしています。単票形式です。
そのフォームに「付属情報入力フォーム」を呼び出すコマンドボタンを用意し、そのフォームを呼び出すようにしています。こちらも単票形式です。ちなみに、プロパティで「入力用=はい」にしています。こうしないと、T_付属データの1レコード目が変更されるだけで、追加してくれないためです。
1つ目のフォームで付属情報入力用フォームの呼び出しボタンをクリックすると、フォームが現れ、従業員番号と氏名のテキストボックス(表示済み)と付属情報を選択するコンボボックスが表示されます。
ここで、コンボボックスから適当な項目を選択し、保存を押すと、そのフォームが消え、1つ目のフォームがリクエリーされて、選択した付属情報がテキストボックスに表示されます。
ここまではすんなり作成できたのですが、問題は、一度入力した付属データを更新できないのです。(消すことはできますので、ユーザがめんどくさがっても、一度消去→再入力、は可能です。が。。。美しくない気がします)
一度付属データを入力した社員を1つ目のフォームで表示させ、付属データ入力用のフォームを表示させると、すでに入力してある付属データが表示されますが、これを変更して終了ボタンを押すと、主キーが重複・・・というメッセージが出て保存できません。
当たり前といえば当たり前なのですが。。。
私の頭の中では、2つ目のフォームで、
1.コンボボックスで職位を選択
2.終了をクリック
3.T_付属情報で従業員番号を検索し、あればそのレコードを更新、なければ新規レコードを追加
というシナリオがあるのですが、どう実現していいのかがわからない状態です。
お詳しい方、ご教授くださいませ。
また、「この程度なら1つのフォーム(とサブフォーム)でできるじゃん」という気もするのですが・・・そういう解決策もあればお教え願えれば幸いです。
長文になりましたが、何卒よろしくお願いします。
No.3ベストアンサー
- 回答日時:
何をお悩みなのか良く分からないのですが
単純にT_基本データを元とする単票フォームがあるのですから
この中に同じくサブフォームを単票で入れ込んで
両方の従業員番号で親子のリンクとすればおしまいと思えるのですが?
※サブフォームのレコードセレクタは消します。
ついでに親フォームのレコードセットをスナップショットにしておけば
某所から来る基本データを誤って変更するなどが防げます。
※子フォーム(T_付属データ)は変更OKです。
勘違いならゴメン。
No.2
- 回答日時:
それならば、
T_基本データ
・従業員番号=主キー
・氏名
・カナ
T_付属データ
・ID(オートナンバー型)<=追加して主キーにする
・従業員番号(データ型のインデックスプロパティを はい(重複なし)にする
・職位
にして、T_基本データテーブルとT_付属データテーブルの従業員番号フィールドをリレーションシップ張るクエリ作成して、フォームの元データはこのクエリを使用して作成すれば新規でも更新でも対応できるでしょ
T_付属データテーブルの職位の部分に入れるデータの為にもう一個、テーブル作った方が管理しやすいかも
お返事遅れました。
ご回答ありがとうございます。
早速、テーブルをご教授いただいたとおりに変更し、クエリも従業員コードで連結するようにしました。(連結は、基本:付属=1:0以上にしてあります。付属データは従業員を網羅していますが、付属テーブルには必ずしも全ての従業員コードが入っていないので)
早速実行しましたが、
1.新規に付属データを入力・・・テーブルに格納OK
2.その従業員の付属データを変更、保存・・・テーブルに上書きOK
と、ここまでは順調でしたが、
3.他の従業員の付属データを入力、保存・・・1.で入力したレコードに上書きされてしまい、1.の従業員情報を表示させると、付則データの箇所は空白(テーブルの中身は、何度やっても1レコードのみ)
となってしまいます。
ちなみに、付属情報を入力するフォームのプロパティで、「データ入力用=いいえ」としています。
そこで、上記プロパティを「データ入力用=はい」にしてみました。
上記、2.では、やはり、インデックスの重複エラー。
3.ではきちんと新しいレコードが作製されています。
どちらにしろ、帯に短したすきに長し、なのです。
なにかヒントはございますか?
お手数をおかけし、申し訳ありません。
No.1
- 回答日時:
テーブルの構造が変です
T_基本データ
・従業員番号=主キー
・氏名
・カナ
・職位ID <=これを追加
T_付属データ
・職位ID=主キー
・職位
上記のようなテーブル構造に変更し、T_基本データの職位IDとT_付属データの職位IDとをリレーションシップで結びます
T_基本データテーブルを元にフォームを作成し、職位ID部分をコンボBOXにします
コンボBOXにて格納されるデータはT_付属データの職位IDの値を入力する事になりますが、コンボBOXの属性を指定する事によってフォームには入力した職位IDに該当するT_付属データテーブルの職位フィールドの値が表示されるように出来ますので、実際には表示させたい たとえば係長・部長など職位で表示させる事が出来ます
コンボBOXにカーソルが来た時に選択出来る項目が一覧表示されるようにdropdownさせても良いですし、camo-tech さんがやっているように一旦別フォームを表示させて入力した値を、取り込むでもOKです
>いちいち弊部署にマッチした構造に変換する暇が無い
Excelをやっている人がAccessを触るとよく勘違いされるようですが、データベースは元データと取り込むデータの順番がバラバラだろうと関係ありません
取り込むデータのこのフィールドの値を、このテーブルのこのフィールドに取り込めというようにクエリー作ればいいだけなので、まったく気にする必要はありません
T_基本データテーブルに 職位ID 持たせてやるだけで、新規だろうが、変更だろうが好きなように出来ますよ
早速のご回答、痛み入ります。
が、質問でも書いたとおり、T_基本は、外部DBですので、デザインが変更できないため、苦し紛れに別テーブルを作り、従業員番号でリンクさせているのです。
説明不足で申し訳ないです。
また、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Chrome(クローム) 入力フォームの履歴を消したい 2 2023/06/29 13:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正規化について
-
UPDATE文で複数列を更新したい...
-
重複で
-
別のデータベースのデータを利...
-
アクセスからSQLサーバーへ...
-
エクセルは出来るのに何故アク...
-
SQLの書き方
-
検索エンジンの2単語以上の検...
-
フィールドの設定
-
Accessでレコード削除ができな...
-
MySQLで重複データを弾く方法(...
-
Oracleで上書きImportはできま...
-
MySQL インメモリでINSERTの方...
-
accessについて
-
お願いします、MYSQLについて
-
初心者ですみませんが・・
-
Access2002 レコード入力時に更...
-
住所のDBテーブル、マスターの...
-
Excelを使用してSQLServerに接続
-
複数テーブルからのデータ取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Oracleで上書きImportはできま...
-
このISAMでは、リンクテーブル・・
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
アクセス レコードセットを更...
-
Accessのテーブルデータを一気...
-
accessでレコード更新直後の反...
-
マテリアライズドビューとスナ...
-
結合テーブルでINSERTする方法...
-
ユニオンクエリで複数ファイル...
-
ORA-01401が表示され、データが...
-
ERROR1062:Duplicate entry.......
-
住所のDBテーブル、マスターの...
-
Accessでの稼働日数計算の方法
-
ACCESSで容量が50MBになった...
-
VBAでSQLServerへのODBC接続
-
ODBC接続で新しいレコードを追...
-
処理の途中で停止させ、再開さ...
-
「クリップボードにコピーされ...
おすすめ情報