質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

2回答

1482閲覧

フォームに入力できない

cerophan

総合スコア15

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2020/06/10 09:12

編集2020/06/10 11:39

下記のテーブルとクエリを作ったとき、クエリBに書き込みしたいのですができません。
なぜでしょうか。

テーブル①
案件NO(主キー)
顧客NO
TODO(日付入力)
TODO(チェックボックス)

テーブル②
顧客グループNO(主キー)
顧客名

クエリA
案件NO
顧客グループNO(テーブル①の顧客NOを変形)

クエリB
案件NO(テーブル①)
顧客グループNO(クエリAより)
顧客名(テーブル②)
上記のTODO2つ(テーブル①)

このとき、クエリBのTODOに書き込みたいのですが、書き込めません。
なんだかおかしいのはわかるのですが、
どこがおかしいのかわからず…
すみません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/10 09:25

意味が分かりません。クエリを書いたということですから、それを質問文に追記して説明できませんか? あと、テーブルの構造も書いてください。
cerophan

2020/06/10 09:26 編集

ちなみに、このデータはテーブルの段階では書き込みできます。クエリの段階から書き込みができません。 ご質問いただいておりました。すみません。後ほど追記します。
hatena19

2020/06/10 09:53

各テーブルのフィールド名と主キー設定を提示してください。 それと作成したクエリのSQLを提示してください。
cerophan

2020/06/10 11:41

追記しましたが、改めて見ると変ですね… でもどこが変なのかわからず… 初めてACCESSで作成しているところで、お恥ずかしいですが何卒よろしくお願いします。
guest

回答2

0

ベストアンサー

クエリで2つのテーブルを結合する場合、一対多または一対一の関係になるようにします。
そうしないと更新不可のクエリになります。クエリ設計の基本です。

一対多の関係にするには、一側のフィールドは主キー(あるいは重複のないインデックスを設定)である必要があります。
でないと、「一」になりませんので。

一対一の場合は、両方とも主キーになりますが、これは特殊な場合なのでほとんど使いません。

提示のフィールド名が類推すると、テーブル②とテーブル①は一対多の関係になるはずです。
そうなるようにテーブルを設計する必要があります。
テーブル②の主キー(顧客グループNo)とテーブル①の(顧客No)が結合できるような設計にすべきです。

ところが、クエリA で 「顧客グループNO(テーブル①の顧客NOを変形)」としてしまうと、結合があいまいなものになってしまいます。そのため、クエリB は更新できないクエリになります。

テーブル①の 顧客NO とテーブル②の顧客グループNO が具体的にどのようなものなか、いくつか例示してもらえませんか。
そうすれば、どのようにフィールド設計を変更すべきかアドバイスできると思います。

追記

顧客グループNOは、顧客NOの下2桁を外した番号です。
顧客グループNO 1234
顧客NO 1234-1

ということは、同じ顧客グループNOに対して、複数の顧客NOがあるということでしょうか。

顧客グループNO 1234 に対して、
顧客NO 1234-1、1234-2、1234-3

だとしたら、

T_顧客
顧客グループNO 主キー
顧客名

T_案件
案件NO 主キー
顧客グループNO (T_顧客 と同じもの 1234)
枝番 (1, 2, 3 ・・・)
TODO日付
TODOチェック

こうすれば 顧客グループNO 同士で結合して更新可能なクエリになります。

1234-1、1234-2、1234-3 というデータはクエリやフォーム上で下記の式で出力します。
=[顧客グループNO] & "-" & [枝番]

投稿2020/06/10 12:50

編集2020/06/11 00:21
hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cerophan

2020/06/10 12:58

コメントありがとうございます!とても助かります。 顧客グループNOは、顧客NOの下2桁を外した番号です。 顧客グループNO 1234 顧客NO 1234-1 こんな感じです。 こちらで参考になりますでしょうか。 遅い時間に失礼します。
cerophan

2020/06/10 13:27

なるほど。アイデアをありがとうございます。また、顧客グループと顧客の関係の実態をご説明する必要があるとは、頭が回りませんでした。 申し訳ありません。 顧客NOは、私にとって不要な情報です。 この情報は管理したくないので、顧客グループNOに変換して扱いたいと思っています。 (顧客グループが枝分かれしているのですが、あまりきれいな状態じゃないので切り捨てたい) ですので、把握もできていないため、顧客テーブルは作りたくない感じです。 しかしながらヒントをいただきましたし、勉強になりました! 本当に感謝しています。
cerophan

2020/06/10 22:46 編集

テーブルにも、ビルダー機能があるのですね。こちらでテーブル①に顧客グループNOを追加すれば良いのですね。 テーブルをできるだけいじりたくないという気持ちがあり、その方向であまり考えていませんでしたが、色々教えていただいたおかげでそうするしかないことも理解できました。 本当に感謝しています。ありがとうございました! (追記)テーブルのビルダーではLeft関数は使えませんでした。その他の方法を模索中です。
hatena19

2020/06/11 00:09 編集

「テーブルのビルダー機能」ってなんことでしょうか。ひょっとして集計フィールドの式ビルダーのことでしょうか。 とにかくテーブルとテーブルを連結して更新可能にするには、片方は主キーフィールドで、両者は同じデータ型にする必要があります。(ただし、オートナンバー型は長整数型と結合)
hatena19

2020/06/11 00:24

回答の追記を修正しました。それで解決できないか検討してみてください。
guest

0

投稿2020/06/10 09:34

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cerophan

2020/06/10 22:47

ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問