• ベストアンサー

ACCESSのクエリで関数を使うときテーブルを指定しないのはなぜ?

問題集を解いています。 クエリで質問です。 [学生テーブル]から[クラス]フィールドを以下の様にIIF関数をつかってデザイングリッドに追加しています。 フィールド クラス名:IIF([クラス]=1,"A1",B1") テーブル  学生テーブル これで実行すると構文エラーになるのですが、問題集の答えをみると テーブルは空白のままです。 なぜテーブルにテーブル名を指定しないのですか?

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>フィールドに関数を使う場合はデザイングリッドのテーブルには指定しない だいたい合っているのですが、補足します。フィールドを関数などで、 加工したものは既に「テーブル内の情報」ではなくなっています。 なので、テーブル名が無いのです。但し、集計関数(SUMやCOUNT)は 特別な扱いです。でも、SUM(IIF(~))のようにすると、テーブル名は 無くなります。 >デザイングリッドのテーブルには指定しない、もしくは この文が無ければ完璧ですね。 >関数の引数に[テーブル名]![フィールド名]と書く 関数を使わない場合でも、フィールド名だけで一意に識別できない 場合はテーブル名(あるいはその別名)による修飾が必要です。 実際に生成されるSQLは必ずこうなっています。 尚、"!"はAccess特有なので、"."(ピリオド)で結合する習慣を身に 付けた方が良いでしょう。

minao9
質問者

お礼

!そうなんですね。 素晴らしい解答ありがとうございます。 ACCESSを習得するためにはやはりSQLを勉強する必要があるでしょうか? どう思われますか?

その他の回答 (3)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

データベースなんでSQLは必要です。DBの設計でも、必要な情報を得る ため、SQLを想像しながらやりますからね。しかし、Access自体は フォームやレポートと言ったものも重要なので、そっちのテクも 勉強してください。でも、全てを含めて発想力が一番大事です。

minao9
質問者

お礼

ありがとうございます。 頑張りたいと思います。 またよろしくお願いいたします。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

クラス名というフィールドがテーブルに無いためです。 因みに、テーブルが1個しかないか、フィールド名"クラス"が一意で、 どのテーブルのものかを修飾する必要なく、認識できる場合はこの 書き方でOKです。しかし、テーブルが複数あり、各テーブルに同名の フィールドがある場合、単に[クラス]ではどちらのフィールドか不明 なので、IIF([学生テーブル].[クラス]=1,"A1","B1")のように修飾が 必要になります。

minao9
質問者

補足

う~んと・・。 フィールドに関数を使う場合は デザイングリッドのテーブルには指定しない、もしくは同フィールド名が複数テーブルにあってどちらのテーブルから選択する場合は、フィールドの関数の引数に[テーブル名]![フィールド名]と書く。 ということでしょうか??

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

構文エラーは引用符が閉じていないためです。 クラス名:IIF([クラス]=1,"A1",B1")        ↓ クラス名:IIF([クラス]=1,"A1","B1") >テーブルは空白のままです どういう意味でしょう? Accessクエリではテーブルは追加したり、削除したりするだけで、 フィールドのような指定のしかたはしません。

minao9
質問者

補足

>クラス名:IIF([クラス]=1,"A1",B1") >      ↓ >クラス名:IIF([クラス]=1,"A1","B1")  わたくしのタイプミスです、すみませんm(_ _)m。 [学生]テーブルにフィールド[クラス名]はあります。 デザイングリッドのフィールドに、クラス名:IIF([クラス]=1,"A1",B1") と入力したら、下のテーブルには[学生]テーブルを入力しないといけないと思ったんですが、不要なのはナゼですか? わかりやすく教えてください。

関連するQ&A

  • アクセス クエリでの関数について

    テーブルのフィールド1にテキスト形式で クダモノリンゴ クダモノオレンジ などが入っています。 クエリで 区別:IIF([フィールド1]="クダモノリンゴ",1,2) という感じで式を入れたのですが 結果はすべて2が表示されます。 別テーブルを作って フィールド1にクダモノリンゴなどの項目(頭に必ずクダモノが付きます) フィールド2に1や2などの種類別の値を入れてクエリでリレーションで関連づけても空白が返されます。 どこがおかしいのかまったくわからず困っています。アドバイスお願いします。

  • クエリの一つのフィールドのIIF関数の限界は14個ですか?

    アクセス2003のクエリで たくさんの条件があり IIf(テーブル名!フィールド名,"正",IIf(・・・ と言う風に、IIF関数を14個までなら正常に動くのですが 15目になると「式が複雑すぎます」となってしまいます。 IIF関数の限界は14個なのでしょうか?

  • アクセス チェックボックスとクエリ

    いつもお世話になっております。アクセス初心者です。 あるフォームのチェックボックスのオンオフとコンボボックス、 クエリの選択条件が思うように連携できなくて困っています。 やりたいことは、、、フォームのチェックボックスが、 ON(True)ならば、 フィールドにコンボボックスのキーワードを含むレコードおよびフィールドが空白のレコードを抽出し、 OFF(False)ならば、 フィールドにコンボボックスのキーワードを含むレコードのみでフィールドが空白のレコードは抽出しない、 としたいのですが…。 IIfやSwitchで式を書きましたが、チェックを入れても外しても、どちらも抽出件数が0件になります。 クエリの実行は、コマンドボタンで別のフォームを開いています。 (IIfでは、エラーが出ているのか、チェックを入れた時『~キャンセルされました』と出ます。  IIf(…,…,IIf(…,…,…)) という感じで書きました。) Switchの時のクエリの抽出条件の式は、次のような感じです。 Switch([Form]![チェックボックス]=True,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*" Or Is Null,[Form]![チェックボックス]=False,([テーブル名].[フィールド名]) Like "*" & [Form]![コンボボックス] & "*") ( Like の前の『([テーブル名].[フィールド名])』は、式をビルドすると、勝手に追加されてきます。) このようなことはできないのでしょうか? 別の方法が必要でしょうか? すみませんが、教えてください。宜しくお願い致します。

  • Accessのテーブル作成クエリで・・・

    Access2000で「テーブル作成クエリ」を作ろうとしておます。 デザインビューの画面では、既存テーブルの項目をクエリのフィールドへ追加していきますが、 (・・・ここまでは極普通のクエリ作成方法です) それ以外のフィールドとして、先頭に”オートナンバー”を設けることは可能なのでしょうか? また、その場合どのように設定したらよいか、教えていただけますか? 何卒、よろしくお願いいたします。

  • ACCESS クエリで表示されているデータがテーブルで反映されない

    宜しくお願い致します。 ACCESSにおいてクエリで表示されているデータがテーブルで反映されないので困っています。 状況としてはあるフィールドに1が入力されるとその隣のフィールドにAが入力されて2が入力されるとBが入力され3,4,5・・・と続いていく感じでそれは“iif”を使って条件指定しています。 この場合クエリのデザインビューで見たときにテーブル名を指定することができないためにこのような状況になっているということはわかったのですが、テーブルにその条件で表示した物が反映されるためどのように記述をしたらいいのでしょうか・・・ ややこしい質問かもしれませんが、宜しくお願い致します。

  • Accessのクエリのテーブルの表示について

    Accessで、デザインビューからクエリを作成するときに テーブルを表示させると、フィールド名の一覧の一番上に *(アスタリスク)がありますよね?あれってどのようなとき使うんですか?

  • クエリで日付型のIIF関数の使用

    テーブル1にフィールド名→日付、データ型→日付/時刻型(主キーなし) を作成し、 クエリ1を作成し、フィールド1にテーブル1の日付フィールドをドラッグし、 フィールド2には「有無: IIf([日付]="","未",[日付])」 を入力しました。 「日付フィールドが空白なら有無フィールドは「未」、入力されているならその日付を表示する」 としたいです。 しかし画像のように 日付フィールドが空白→有無フィールドも空白 日付フィールドに日付が入っているなら→有無フィールドは#エラー になってしまいます。 何がだめなんでしょうか? よろしくお願い致します。

  • 追加クエリでテーブル全体を指定したまま条件を追加したい

    ACCESS2000を使ってます。 追加クエリでレコード追加の元となるテーブル全体を選択してます。 クエリのフィールド:テーブル名称.*と指定していますが、テーブルに追加する条件として、西暦4桁が格納されている「NENNDO」フィールドに2006だけのレコードを追加したいです。 クエリのデザインでフィールド:テーブル名称.*と指定されている状況で「NENNO」フィールドを追加して抽出条件に2006を指定して実行すると「出力先が重複しています」と表示されます。 追加クエリの対象テーブルが沢山あって、レコード追加先がOracleとなっているのでテーブルを削除せずにACCESSの削除クエリと追加クエリでレコードの作業したいと思っております。 フィールド:テーブル名称.*としたまま、テーブルに追加する条件だけを設定する方法をご教授願います。 (フィールドは、*ではなく、フィールド全てを1つづつ指定しないといけないのでしょうか?)

  • アクセスのクエリに「PHONETIC」関数はないのですか?

    アクセス2003です。 テーブル1 名前 佐藤 鈴木 木村 を クエリ1にて 名前  ふりがな 佐藤   サトウ 鈴木   スズキ 木村   キムラ というようなフィールドを作成したいのですが クエリのデザインビューのビルドで見る限りだと 「PHONETIC」関数がありませんでした。 クエリではなくテーブルに手打ちするしかないのでしょうか? よろしくお願い致します。

  • アクセスのクエリで

    あるテーブルはエクセルからインポートしていますが、全てのフィールドが空白というレコードが多数存在します。 これをクエリで(他に方法があればどの様な方法でもよいです)全てのフィールドが空白のレコードは表示しない様にする事はできますか? これを更新クエリにして、新しく全て空白のフィールドのレコードが無いテーブルを新たに作ろうと考えています。 教えて下さい。よろしくお願いします。