Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
同じIDを別のテーブルに入力したい
投稿日時: 20/10/22 12:04:36
投稿者: d193168

新規で社員マスタを作成するフォーム【F_社員マスタ新規】(プロパティでデータ入力用=はい)で入力する際、別のテーブル【T_データ】に同じ社員IDが新規で入力される様にしたいのです。
【F_社員マスタ新規】にテキストを配しコントロールソースに「T_データ.社員ID」とし、【F_社員マスタ新規】のコントロールの社員IDのプロパティで喪失時の埋込みマクロで
値の代入(アイテム=[T_社員データ].[社員ID]、式=[社員ID])としてみたのですが
「このオブジェクトは、オートメーションオブジェクト'T_データ'は含みません」と表示されます。
値の代入の設定違いまたは他の方法があったら教えて下さい。
いつも教えてもらうばかりで済みません。

回答
投稿日時: 20/10/22 13:18:03
投稿者: sk

引用:
新規で社員マスタを作成するフォーム【F_社員マスタ新規】
(プロパティでデータ入力用=はい)で入力する際、
別のテーブル【T_データ】に同じ社員IDが新規で入力される様にしたいのです。

引用:
アイテム=[T_社員データ].[社員ID]、式=[社員ID]

フォーム[F_社員マスタ新規]のレコードソースが
テーブル[T_社員データ]であるとして、
[T_社員データ]に対して[T_データ]は(個々の社員に関する)
どのような情報を格納するためのテーブルなのでしょうか。
 
例えば、[T_社員データ]が主テーブル( 1 側)、
[T_データ]がその従属テーブル(多側)なのであれば、
[T_データ]をレコードソースとする連結フォームを別途作成し、
[F_社員マスタ新規]の詳細セクション上のサブフォームとして
そのフォームを埋め込み、[社員ID]同士でリンクさせる形を
取ればよろしいのではないでしょうか。

回答
投稿日時: 20/10/23 11:45:57
投稿者: Suzu

引用:
値の代入(アイテム=[T_社員データ].[社員ID]、式=[社員ID])としてみたのですが
「このオブジェクトは、オートメーションオブジェクト'T_データ'は含みません」と表示されます。

 
【SetValue マクロ アクション】
https://support.microsoft.com/ja-jp/office/setvalue-%E3%83%9E%E3%82%AF%E3%83%AD-%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3-36dfca71-0d8c-40fc-8b9f-31cfe5f48aab
引用:
"SetValue/値の代入" マクロ アクションを使って、フォーム、フォーム データシート、または レポート上にある Access のフィールド、コントロール、またはプロパティの値を設定できます。

テーブル上のフィールドに対しては有効ではありません。なのでエラーとなります。
 
 
【T_データ】の使い方
それぞれのテーブルの社員IDのインデックス設定
 に拠って、採れる方法は変わるでしょう。
 
skさんの提示されている要に
T_データ/T_社員データ が 社員ID により 一対一 や、一対多 であれば
リレーションを貼ったり、二つのテーブルをクエリにて連結したり、
メインサブフォームによる方法が採れるでしょう。
 
逆に
T_データ/T_社員データ が 社員ID により 多対一 又は、0対一 なのであれば
 T_社員フォームの挿入後 処理 にて 追加クエリ を発行する方法もあります。
   INSERT INTO T_データ VALUES (FORMS![F_社員マスタ新規]![社員IDコントロール名])

投稿日時: 20/10/23 12:00:30
投稿者: d193168

連絡ありがとうございます。
 

引用:
[T_データ]がその従属テーブル(多側)なのであれば、
[T_データ]をレコードソースとする連結フォームを別途作成し、
[F_社員マスタ新規]の詳細セクション上のサブフォームとして
そのフォームを埋め込み、[社員ID]同士でリンクさせる形を
取ればよろしいのではないでしょうか

 
サブフォーム作成し、[社員ID]でリンクさせてみました。
親フォームでIDを入力するとサブフォームのIDも同じIDにフォーム上では変更されます。そして【T_データ】[社員ID][氏名]は新規で作成されていますが、【T_社員データ】は新規に作成されていませんでした。
サブフォームにID以外は作成していなかったので他のフィールドを追加してもダメでした。
ただサブフォームのID以外をサブフォーム上で新たに入力すると【T_社員データ】[社員ID]は新規で作成されました。
sk様のやり方と違うのでしょうか?
ちなみにサブフォームも(データ入力用=はい)にしてあります。

回答
投稿日時: 20/10/23 13:18:18
投稿者: sk

引用:
サブフォーム作成し、[社員ID]でリンクさせてみました。
親フォームでIDを入力するとサブフォームのIDも同じIDにフォーム上では変更されます。
そして【T_データ】[社員ID][氏名]は新規で作成されていますが、
【T_社員データ】は新規に作成されていませんでした。

引用:
ただサブフォームのID以外をサブフォーム上で新たに入力すると
【T_社員データ】[社員ID]は新規で作成されました。

それは[F_社員マスタ新規]([T_社員データ]と連結しているフォーム)を
メインフォームにしているのではなく、[T_データ]と連結しているフォームの
サブフォームにしているからでしょう。
 
また、メインフォーム(と連結しているテーブル)に新規レコードを追加しただけでは、
サブフォーム(と連結しているテーブル)にレコードは追加されません。
 
1. メインフォーム上で新規レコードの各連結コントロール
   (フィールド)の値を編集し、レコードを保存する。
 
2. そのままサブフォームの新規レコードの[社員ID]以外の
   各連結コントロール(フィールド)の値を編集し、
   レコードを保存する。
 
こういう操作手順を想定した設計だからです。
 
おっしゃっていることから推察した限り、[社員ID]の値が
入力された(他のフィールドの値は全て Null である)だけの
新規レコードを挿入なさりたいようですが、実質的に
空データに等しいレコードをわざわざ追加なさろうとしているのは
どういった理由によるものなのでしょうか。

投稿日時: 20/10/23 13:58:47
投稿者: d193168

引用:
推察した限り、[社員ID]の値が
入力された(他のフィールドの値は全て Null である)だけの
新規レコードを挿入なさりたいようですが、

はい、その通りです。
引用:
実質的に
空データに等しいレコードをわざわざ追加なさろうとしているのは
どういった理由によるものなのでしょうか。

確かに社員データとデータ(計測値)を1つとのテーブルにすれば、IDや氏名を入力するとレコードが作成される事はわかっていました。最初はそうしていたのですが、年に4〜5回の計測と翌年も同じ社員や他の社員が当てはまると聞き、また年度で集計をとっているとも聞いたので、社員の個人データを別にしたほうが良いと思い作成しました。
今思えば1つで行っても諸々の事は対処出来たと思います。

回答
投稿日時: 20/10/23 14:24:01
投稿者: sk

引用:
年に4〜5回の計測と翌年も同じ社員や他の社員が当てはまると聞き、
また年度で集計をとっているとも聞いたので、社員の個人データを
別にしたほうが良いと思い作成しました。

テーブルの正規化を行なわれたこと自体は別段問題ありません。
(むしろそうすべきです)
 
・各社員の基本情報([T_社員データ]のレコード)は、
 新しい社員が入社した都度登録すればよい。
 
・その社員に関する何らかの履歴情報([T_データ]のレコード)は、
 その履歴に関するイベント(ここでは「計測」)が発生した都度
 登録すればよい。
 
ここでおっしゃっている「計測」が具体的に何を意味しているのかは
不明ですが、「入社」と「計測」が同時に発生するわけではないなら、
通常は「入社」が先、「計測」がその後に発生するイベントです。
 
「入社」したばかり時点で、まだ 1 度も行われていない「計測」に
関する情報を追加する必要はないはずです。

投稿日時: 20/10/23 15:39:20
投稿者: d193168

引用:
「入社」と「計測」が同時に発生するわけではないなら、
通常は「入社」が先、「計測」がその後に発生するイベントです。

担当に確認したところ同時に計測値も入力すると言っていました。
「社員を追加するのは?」と聞かれたのでマスタの事しか考えなかったです。
引用:
「入社」したばかり時点で、まだ 1 度も行われていない「計測」に
関する情報を追加する必要はないはずです。[/code]確かにそうですね。
このアクセスのデータはインポートして作成するので都度インポートして貰える(こうすると社員マスタと初回の計測値がインポートされる)事で解決出来ました。
 
sk様
アドバイス大変ありがとうございました。
助かりました。