フォームの結合方法が間違っているせいで、フォームの入力ができなくなってしまう問題についての相談

このQ&Aのポイント
  • フォームの入力ができなくなる原因は、フォームのコントロールソースを変更した際に、コンボボックスの選択ができなくなることです。この問題は、クエリの結合方法に問題があることが原因と考えられます。
  • テーブルだけのクエリでは問題なく選択ができますが、集計クエリを追加すると問題が発生します。おそらくテーブルと集計クエリの結合方法が間違っていると思われます。
  • 具体的なSQL構文を示すと、フォームのコントロールソースに関連しているクエリで、テーブルと複数のクエリが結合しています。この結合方法が間違っているために、フォーム上での選択ができなくなってしまっている可能性があります。
回答を見る
  • ベストアンサー

フォームの入力ができなくなるのは結合の仕方がまずいからだと思うのですが、どこが悪いのかわからずに困っています。

フォームのコントロールソースを替えるとコンボボックスの選択が出来なくなります。 テーブルだけのクエリの時は、フォーム上で問題なく選択ができます。 そのクエリに集計クエリをつなげるとフォーム上で選択できなくなります。 クエリ上でも選択できません。 おそらくテーブルとクエリの結合の仕方が間違えていると思うのですが、どこが違っているのかわかりません。 SQL構文は次のようになります。 (1)SQL:Q機器入替_クレームC02のみ抽出 SELECT T市場対応履歴.ユーザNO, T市場対応履歴.対応分類(1)ID FROM T市場対応履歴 WHERE (((T市場対応履歴.対応分類(1)ID)="C02")) ORDER BY T市場対応履歴.ユーザNO; (2)SQL:Q機器入替_クレーム回数カウント SELECT Q機器入替_クレームC02のみ抽出.ユーザNO, Count(Q機器入替_クレームC02のみ抽出.対応分類(1)ID) AS 対応分類(1)IDのカウント FROM Q機器入替_クレームC02のみ抽出 GROUP BY Q機器入替_クレームC02のみ抽出.ユーザNO; (3)SQL:Q機器入替ポイント(フォームのコントロールソースです) SELECT T機器入替ポイント.ID, T顧客情報.ユーザNO, DateDiff("yyyy",[機器納入日],Date()) AS 使用年数, T顧客情報.機器納入日, T機器入替ポイント.交渉ID, T機器入替ポイント.機器入替ポイント総合ID FROM T交渉master RIGHT JOIN ((T顧客情報 LEFT JOIN Q機器入替_クレーム回数カウント ON T顧客情報.ユーザNO = Q機器入替_クレーム回数カウント.ユーザNO) LEFT JOIN (T機器入替ポイント_総合master RIGHT JOIN T機器入替ポイント ON T機器入替ポイント_総合master.機器入替ポイント総合ID = T機器入替ポイント.機器入替ポイント総合ID) ON T顧客情報.ユーザNO = T機器入替ポイント.ユーザNO) ON T交渉master.交渉ID = T機器入替ポイント.交渉ID; 原因がおわかりになる方がいらっしゃいましたらどこかおかしいところがおわかりになる方がいらっしゃいましたら、ご教示をお願いいたします。

  • 375k
  • お礼率60% (176/289)

質問者が選んだベストアンサー

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

集計クエリは更新できません。 http://support.microsoft.com/kb/328828/ja

375k
質問者

お礼

集計クエリは更新できないんですね。 既存のテーブルに入力されているデータを引っ張りたかったのにそれができなくて困ってしまいました。 もう少し調べてみます。 ありがとうございました。

関連するQ&A

  • Accessで別テーブルの個数をユーザNOごとにカウントしてクエリに表示させる方法は?

    顧客管理をAccess2003で行っています。 ユーザーが持っている機械入替えの情報を入力するフォームを追加することになりました。 そこに必要なフィールドのひとつに「トラブル回数」があります。 「トラブル回数」は、別テーブルの「T対応履歴」の対応分類に"C2"の値が入力されているものをユーザー別にカウントをして引っ張りたいと思います。 私が思いついた方法は、集計クエリを使う方法です。 (1)まず「T対応履歴」からユーザNOと対応分類のクエリを作って抽出条件を"C02"で引っ張り出しました。 (2)次にそのクエリをユーザNOごとにグループ化し対応分類をカウントした集計クエリを作りました。 (3)その集計クエリと「T機器入替」をクエリで結合させました。 そうしたら問題が発生してしまいました。 フォーム上で入力の更新ができなくなってしまったのです! 集計クエリは更新できないことがわかりました。 どうやら関数を使うようなのです。 http://support.microsoft.com/kb/328828/ja このような場合、Accessを熟練されている方ならどのような方法を取られるのでしょうか? よろしかったら教えていただけないでしょうか?

  • Accessのコンボボックスで表示させるデータを1500件の中から条件値で絞り込むにはどうしたらいいのでしょうか?

    Access2003を使用しています 次のようなことをしたいのですが、方法がわからず悩んでいます。 「対応履歴」というフォームがあります。 その中にテキストボックス「ユーザNO」と「顧客名」があります。 ●このフォームの「顧客名」を入力したら、「ユーザNO」が自動的に入るようにしたいです●  (顧客から問合せが入った時点で顧客から聞きだせるのは顧客名で、ユーザIDは受付担当者がデータベースで調べたあとじゃないとわからないからです)。 「顧客名」はコンボボックスにして抽出をしたいです。 それの元ソースは、テーブル「顧客情報」から引っ張りたいのですが、1500件ほどあるので、見つけるのが困難なのがネックです。 そこで私が思いついたのは、抽出条件を指定するテキストボックスを別に設けて、そこに入力した文字を含む顧客名だけを顧客名コンボボボックスに表示させる方法です。([山]と入力すれば、山中、大山、(株)山田屋など「山」を含むすべての顧客名が候補にあがる) その中から該当する顧客名を選ぶと、ユーザNOテキストボックスにも自動的に入力される・・・といったものです。 このようなことは可能でしょうか? とすれば、どのような設定をすればいいのでしょうか? 私なりにやってみましたが、「顧客名」コンボボックスの候補の絞込みが出来ません。 私が考えた方法以外でも構わないのです。 F対応履歴の入力画面で「顧客名」から「ユーザNO」(T顧客情報にある顧客名とユーザNO)が連動されて入力できればいいのです。 F対応履歴 ユーザNO・・・テキストボックス 顧客名・・・コンボボックス 対応履歴ID T対応履歴 ユーザNO・・・テキスト型 顧客名・・・テキスト型 対応履歴ID・・・オートナンバー―――主キー T顧客情報 ユーザNO・・・テキスト型―――主キー 顧客名・・・テキスト型 フリガナ・・・テキスト型 どなたかお知恵をお貸しください。 よろしくお願いいたします。

  • 3つのテーブルの結合

    access2000にて作業しています。 下記のようなテーブルが3つあります。 [納品T] 年月日|顧客番号|品名|数量 [品名マスタ] 顧客番号|品名 [顧客マスタ] ID|顧客名 納品クエリを作り デザイン画面で [納品T]品名と[品名マスタ]品名を結び [納品T]顧客番号[顧客マスタ]IDを結んで クエリを表示すると、[納品T]のレコードより少なくなってしまします。 その原因は、別の顧客で品名が同一なものがあることが原因と思うのですが、[納品T]と納品クエリのレコード数を一致させるには、SQLはどのように書けばいいのでしょうか。

  • フォームの再表示に関して

    過去の質問にも同じようなものがありましたので、参考にしながらやってみたのですが、うまくいかなかったので質問させて頂きます。 Windows2000・アクセス2000を利用しています。フォーム上で非連結のテキストボックス1つとサブフォームを作成しています。テキストボックスに[No]を入力で指定すると、テキストボックス更新時にサブフォームの内容が、その[No]のデータのみに抽出されて再表示するようにしたいと思っています。 SQLで並べ替えと抽出をしています。コードは下記のような感じで作成しています。 Private Sub 検索No_AfterUpdate() Dim Db As Database Dim Qd As QueryDef Dim No As Integer Dim Sql_Str As String Set Db = CurrentDb Set Qd = Db.QueryDefs("Q_抽出") No = [検索No].Value Sql_Str = "SELECT T_テンプレート明細.*" & _ " FROM T_テンプレート明細 INNER JOIN T_テンプレート ON T_テンプレート明細.テンプレートNo = T_テンプレート.テンプレートNo" & _ " WHERE [T_テンプレート明細].[テンプレートNo] = " & No & _ " ORDER BY [T_テンプレート明細].[テンプレートNo], [T_テンプレート明細].[テンプレートID];" Qd.Sql = Sql_Str サブフォーム名.Requery Qd.Close Db.Close End Sub サブフォームをrequeryすれば再表示するのかなと思っているのですが・・・・テキストボックスに更新をかけた後にクエリを確認するとSQLは一応指定出来ているようです。簡単な説明で分かりにくいかもしれませんがよろしくお願い致します。

  • Accessで複数テーブルのJoin

    次のようなテーブル(T1~T4)とクエリ(Q1~Q2)があります。 クエリの表で囲っているものはAccessのQBEを表しています。 その下はAccessが自動生成したSQLです。 Accessがある場合はいいのですが、ない場合、いきなりSQLを 書かないといけないわけですが、どのような順番に並べていって いいのか整理がつきません。 4つ以上になるとさっぱりです。 何かヒントをいただけませんでしょうか? T1:売上表[売上No、日付、顧客CD] T2:顧客表[顧客CD、顧客名] T3:売上明細[ID、売上No、連番、商品CD、数量] T4:商品表[商品CD、商品名、単価] Q1: ┌────────────────┐ │日付 │ 商品名│単価 │数量 │ ├────────────────│ │売上表│商品表│商品表│売上明細│ └────────────────┘ SELECT 売上表.日付, 商品表.商品名, 商品表.単価, 売上明細.数量 FROM 商品表 INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No) ON 商品表.商品CD = 売上明細.商品CD; Q2: ┌────────────────────┐ │日付 │ 顧客名│商品名│単価 │数量 │ ├────────────────────│ │売上表│顧客表│商品表│商品表│売上明細│ └────────────────────┘ SELECT 売上表.日付, 顧客表.顧客名, 商品表.商品名, 商品表.単価, 売上明細.数量 FROM (商品表 INNER JOIN (売上表 INNER JOIN 売上明細 ON 売上表.売上No = 売上明細.売上No) ON 商品表.商品CD = 売上明細.商品CD) INNER JOIN 顧客表 ON 売上表.顧客CD = 顧客表.顧客CD;

  • access 入力フォームにクエリを表示させたい

    ある物件を管理しています。 T_物件情報 物件ID(オートコレクト)/物件名 T_水道検針 検針No(オートコレクト)/物件ID/検針日 T_検針明細 明細No(オートコレクト)/検針No/部屋番号/検針値 このようなテーブルがあり、F_水道検針で入力できるフォームを作りました。 T_検針明細はサブフォームになっています。 入力の際の見た目として、前回の検針値、使用量(今回から前回を引いたもの)を表示させたいと思っています。 一応クエリで前回の検針値を出すものQ_前回検針値を作りました。 それぞれ対応するものにリレーションを設定しています。 抽出条件として 物件ID [forms]![F_水道検針]![cmb物件ID] 前回検針日 [forms]![F_水道検針]![前回検針日] ←フォーム上で非連結テキストボックスです 部屋番号 [forms]![F_水道検針]![部屋番号] を設定しています。 サブフォーム上に非連結テキストボックスを2つ設置し、先ほど書きました前回の検針値、使用量を表示できればと思っています。フォーム自体のコントロールソースがT_水道検針、T_検針明細ですのでクエリをソースには持ってこれないですよね。どうすれば表示できるのかご教授いただければと思います。 とりあえずこのフォームを入力する際には見た目だけわかればいいので、このような質問をさせていただきました。 VBAは始めたばかりで参考書をみながらひとつずつやっている状況です。 マクロについても同じです。 また、後々請求書で計算をすることを考えるとテーブルの構築などから見直したほうがいいのかもしれません。 もっとよりよい方法がありましたらそれでもいいので宜しくお願い致します

  • 複数テーブルの結合の仕方

    いつもお世話になっております。 MySQLとPHPで開発をしております。 複数のテーブルからのデータの取得方法について教えていただきたいです。 テーブル:qes(key:q_id) |q_id|memo|del_id| +------------------+ |1 |ああ|NULL | |2 |いい|NULL | |3 |うう|NULL | テーブル:ans(key:q_id、a_id) |q_id|a_id|memo|del_id| +------------------------+ |2 |1 |かか|delete| |2 |2 |きき|delete| |3 |1 |くく|NULL | |3 |2 |けけ|NULL | |3 |3 |ここ|NULL | 上記のようなテーブルがあります。 ans>q_idがないか、ans>del_idがNULLのデータを取得したいと考えています。 期待する結果は・・・ |q_id|memo|del_id| +------------------+ |1 |ああ|NULL | |2 |いい|NULL | 以下のようなクエリを発行した場合 q_id=1 は取得できるのですが、q_id=2 が取得できません。 select q.* from qes q left join ans a using(q_id) where a.a_id is NULL and a.del_id is NULL group by q.q_id order by q.q_id ASC temporary table を使用しないとできないでしょうか。 ご教示よろしくお願いいたします。 <環境> MySQL:3.23.56 PHP:Version 4.3.1

  • 3つのテーブルを結合したSELECT文

    お世話になります。困っているので質問させて下さい。 MySQLのSQL文に関しての質問ですが、PHPで記述しているので、このPHPのカテゴリで投稿させて頂きます。ご了承下さい。 以下のようなカラムを持ったテーブルがあります。 実際に当方で用意しているカラムそのものなのですが、簡単に説明させてもらうと、この教えてGooのような質問を投稿できるサイトで、その質問となるデータを収めるのが、questionテーブル。会員データを収めるのがuserテーブル。PHPやMySQL、HTMLのように質問のジャンルを収めておくテーブルがcategory2です。 question(テーブル) q_no  q_user_no  q_category_no  q_title q_exp  q_img  q_date  q_state  q_answer_cnt  q_solution  state user(テーブル) user_no  user_mail  user_pass  user_n_name  user_icon category2(テーブル) no category_id category_no category2_name ※上記各テーブルの最初のカラムはauto-incrementとして自動で連番を与えています。 ここで質問に移ります。 questiontテーブルに質問データがいくつか収まっている状態で、質問単位(スレッド単位)で呼出すためにURLに、questionテーブルのq_noとなる番号をパラメータで渡しているのですが、 $sql = "SELECT * FROM question WHERE q_no = '$get_q_no' AND state = 'on' AND q_state = 'on'"; このように、questionだけを呼出すと問題ないものの、3つのテーブルを結合して呼出すと一部のデータが呼び出せない状態です。 $sql = "SELECT question.q_no, question.q_user_no, question.q_category_no, question.q_title, question.q_exp, question.q_date, question.q_state, question.q_answer_cnt, question.q_solution, question.state, user.user_no, user.user_n_name, user.icon, user.user_mail, category2.no, category2.category2_name FROM question INNER JOIN user ON question.q_user_no = user.user_no INNER JOIN category2 ON question.q_category_no = category2.no WHERE question.q_no = '$get_q_no' AND question.state = 'on' AND question.q_state = 'on'"; SQL文に問題があるのでしょうが、全てのデータが呼び出せないのであればともかく、一部のデータだけ呼び出せないという状況で、どこに問題があるか分からず、この場をお借りし質問させて頂ければと投稿しました。 最後になりましたが、MySQLは、5.1.22-rcです。 お忙しいなか恐縮ですが、アドバイスのほど頂戴出来れば幸いです。 宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • Access、同じテーブルの2つの項目対他のテーブルで1つの項目のリレーションは可能?

    Accessで販売管理をしています。 以下のテーブルを作成し(*は主キーです)、 [売上T]  [商品M]  [顧客M]  [受注T] *売上NO  *商品ID  *顧客ID1  *受注NO 商品ID   商品名    *顧客ID2  商品ID 日付    顧客ID1     顧客名    受注日 金額    顧客ID2            受注金額        受注先1        受注先2 参照整合性にチェックを入れリレーションでつないでいます。 リレーションシップは下記のとおりです。 [売上T]商品ID―[商品M]商品ID―[受注T]商品ID [商品M]顧客ID1及び2―[顧客M]顧客ID1及び2―[商品M]受注先1及び2 ここで顧客と受注先が重複することもあるので、顧客Mから顧客ID及び受注先IDの2つのテーブルにリレーションシップを設定しているのですが、 クエリで  [受注T]受注NO及び受注金額、[顧客M]顧客名で抽出したところ、 5000件以上[受注T]にデータがあるはずのものが、1200件ほどしか抽出できませんでした。 ちなみに[顧客M]と[受注用顧客M]というまったく別のテーブルを作成し、 [商品M]受注先1及び2―[受注用顧客M]顧客ID1及び2 とリレーションを作成し、クエリで抽出するとうまくいきました。 しかしこの方法だと、[顧客M]と[受注用顧客M]という2つのテーブルを管理しなければならなくなるので面倒です。 そこで質問です。 同じテーブルの2つの項目対他のテーブルの1つの項目とでは、うまくリレーションが設定できないのでしょうか。 もし出来ない場合、[顧客M]と[受注用顧客M]の2つのテーブルを管理しなければならない訳ですが、 なんとか簡単に管理できる方法(ひとつのテーブルを変更すると簡単にもうひとつが変更できる設定)はないでしょうか。 非常にわかりにくく長い文章で申し訳ありません。 VBA等はさっぱりわかりませんので、普通の設定の範囲内で、できるかどうかよろしくお願いします。

  • Accessの表結合SQL

    AccessのSQLで外部結合を複数使うと SQLがエラーになります。 クエリで確認してエラーにならない様につくってみましたが、意図する事をやろうとするとエラーになります。 どこが悪いか教えていただけませんか?おそらくSQLサーバーでは余裕で通るSQLだと思うのですが。。。 SQL = SELECT * FROM T1 LEFT JOIN T2 ON T1.A = T2.A LEFT JOIN T3 ON T1.B = T3.B LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' やりたいのはT1を基準にT2,T3,T4からデータを引っ張ってきたい。その条件としてT4から引っ張ってくるのは T4.DがiNumである事、基準となるT1のT1.EがiNumである事です。 Accessでは"AND T4.D = iNum"がだめで、 WHERE区に書くと外部結合にもかかわらずT4.D = iNumのデータしか抽出されなくなる。(T1.C = T4.CのデータがT4.D = iNumでなくてもT1のデータが抽出されなくてはならない。) さらに SQL = SELECT * FROM ((T1 LEFT JOIN T2 ON T1.A = T2.A) LEFT JOIN T3 ON T1.B = T3.B) LEFT JOIN T4 ON T1.C = T4.C AND T4.D = iNum WHERE T1.E = 'iNum' こんな括弧が必要になってくる。 これだとT1とT2を外部結合した結果をT3と外部結合して さらにその結果をT4と外部結合しているという意味あいになってしまって、意図が違うのですが。。 結果は同じなのでAccessに譲ってやってもいいのですが 前者はT1で抽出されなければならないデータが抽出されないので困ります。 よろしくお願いいたします。