• 締切済み

Access2002のパラメータ設定で

Access初心者です。 クエリの取引先フィールドにパラメータを設定します。 webから「[取引先を入力してください]」と、大括弧ごとペーストしてEnterを押すと、ダブルクオーテーションで囲まれてしまい、 パラメータの指定に失敗してしまいます。 大括弧を手入力すればうまく行くのはわかるのですが、 ペーストするとどうして失敗するのでしょうか? その理由を教えてください。

みんなの回答

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

> これはうまく行った方のクエリでしょうか?失敗している方のクエリでしょうか? 両方見比べてください。SQLビューでの場合、 うまく行く方:(前略)where <条件付けしたい列名>=[取引先を入力してください](後略) うまく行かない方:(前略)where <条件付けしたい列名>="[取引先を入力してください]"(後略) のはず。 つまり<条件付けしたい列名>の値が[取引先を入力してください]であるものを探せ、になってます。だから失敗。 >> 「パラメータ」は通常、テーブル・クエリのどちらにも定義されていない変数です。 > >この意味がよくわかりません。 対象は単独のテーブルですか?2つ以上のテーブルを結合したことがありますか? where条件など、出てくる項目(ここでは列)は、正規には [テーブル名]![列名](または[テーブル名].[列名])で表現されます。 日本語名のテーブルや列名だと自動で囲まれます。 でも、冗長なので普通は省略して<列名>のみ、でOKです。 なのでselectやwhereで登場する列名は、テーブル(またはクエリ)に定義されている列から自動的に探し出して使用されます。 これは2つ以上のテーブルを結合させ、またそのどちらにも同じ列名があると、テーブル名が補われることでも確認いただけると思います。 クエリの元となるテーブル(またはクエリ)に定義されていない項目が登場すると、不足しているので内容を指定しろ!、と表示・要求してきます。 これこそが「パラメータ」なのです。 以下もお試しください(別MDBでね) 2列以上をもつテーブルを作成し、すべての列を列挙して選択するクエリを作成してみてください。(テーブル.*ではダメ) データを適当に何レコードか作成しておいてからクエリを実行してみる。問題なく検索されますよね。 次に、このテーブルの列をひとつ削除してしまう。そしてクエリを再度実行。 不足している情報を求めてきます。 (削除した列名の値入力を求めるダイアログが表示されます)

runbini
質問者

補足

再びありがとうございます。 おっしゃることは難しいのですが、これからの宿題にさせてください。 さて、一番知りたいのが、デザインモードで、取引先名フィールドの下の 抽出条件の所に、 webから[取引先を入力してください]とペーストするのと[]を手入力してから中身の文字列をペーストするのでは 同じ事をしているのに結果が違う理由なのです。 宜しければ教えてください。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

作成しているクエリをデザインビューまたはSQLビューでみてください。 「パラメータ」は通常、テーブル・クエリのどちらにも定義されていない変数です。 変数は「[]」で囲むことで示されます。 だからその中に「[]」が入るのでは[]が二重になるので、マズイ。 同じような例は、文字型で定義された列に抽出条件を指定すると自動的に「"(ダブルクォーテーション)」で囲まれますよね。 あれと同じです。「'(シングルクォーテーション)」で回避もできますが。 で、良いですか?

runbini
質問者

お礼

補足の補足ですみません。 大括弧=[] かぎ括弧=「」 で、かぎ括弧はペーストも入力もしていません。 デザインビューで表示されている失敗例は "[取引先を入力してください]" です。 これは "[[取引先を入力してください]]" という風に大括弧が2重にはなっていませんし、SQLビューの方も2重にはなっていません。

runbini
質問者

補足

回答をありがとうございます。少々補足質問させてください。 > 作成しているクエリをデザインビューまたはSQLビューでみてください。 これはうまく行った方のクエリでしょうか?失敗している方のクエリでしょうか? > 「パラメータ」は通常、テーブル・クエリのどちらにも定義されていない変数です。 この意味がよくわかりません。 > 変数は「[]」で囲むことで示されます。 これはわかります。WHERE (((T取引先.取引先名)=[取引先を入力してください]));という感じになっています。 > だからその中に「[]」が入るのでは[]が二重になるので、マズイ。 [[]]ということでしょうか?デザインビューで[]を手入力して文字部分をペーストすれば上記の記述になり、[取引先を入力してください]と大括弧ごとペーストする(もちろん[]の手入力はありません)と、SQLビューではWHERE (((T取引先.取引先名)="[取引先を入力してください]"));となり、[[]]にはなっていません。 > 同じような例は、文字型で定義された列に抽出条件を指定すると自動的に「"(ダブルクォーテーション)」で囲まれますよね。 はい。webから貼り付けた[取引先を入力してください]は文字列として認識されるわけですが、[]を手入力、文字だけをペーストすると文字列として認識されない、この違いはどこから来るのでしょうか? > 「'(シングルクォーテーション)」で回避もできますが。 どこにいつシングルクォーテーションを入力すればいいでしょうか? 宜しくお願いいたします。

関連するQ&A