【無料配信♪】Renta !全タテコミ作品第1話

Access where条件式について
最近マクロでwhere条件式による抽出を知った初心者です。

現在単ページ表示のフォームから、表示されているID番号のレポートを表示させたいと考えているのですが、そのレポートをレコードソースになるマスターテーブルから
[Form]![ID]=[マスターテーブル]![ID]
とすると該当するレポートが表示されるのですが、
レポートのレコードソースをクエリに変更
[Form]![ID]=[マスターテーブルクエリ]![ID]
に変更するとすべて空で表示されてしまいます。
クエリを使用することは出来ないのでしょうか?

データベースの基礎があやふやなこと、where条件を最近知ったことなどから、検討違いなことを質問していたら申し訳ありません。
また質問に対して、足りない情報があればご指摘願います。

OS Windows XP
Access 2003

このQ&Aに関連する最新のQ&A

A 回答 (2件)

二つのテーブルに同じ名前のフィールドがある場合は


テーブル名で修飾して、どちらのものかを明示的に
指定します。下記参照

テーブルB.ID=~ AND テーブルC.フィールドD=~

最初の質問で[テーブル]![ID]となっていたのと同じ
ですが、!はAccess独特の表記で、他のDBシステムでは
ピリオドになります。[]はテーブル名やフィールド名に
予約語や空白などが含まれている場合に、その効果を
打ち消すために使います。今回の例のような場合には
予約語や特殊記号のない名前なので[]は不要です。また、
フィールド名が一意であれば修飾の必要はありません。
    • good
    • 0

WHERE句の条件式は現実にあるオブジェクト名を


使わなければなりません。
「マスターテーブル」というテーブルに「ID」と言う
フィールドがある以上、レコードソースがクエリに
代わっても、各オブジェクト(テーブルやフィールド)
の名前は変わらないので、元のままの名前を使います。
クエリ内でエイリアス(別名)を定義した場合は別名を
使います。以下はその例です。

SELECT ID As RepoId FROM マスターテーブル As Master

上記SQLを持つクエリをXXXとします。IDはReportId、
マスターテーブルはMasterという別名になっています。
条件式は下記の様に変わります。

[Form]![ID]=[Master]![ReportId]

つまり、クエリ名は出てきません。エイリアスを定義
していないなら、名前は元のままです。

この回答への補足

そうなんですね。
ご回答ありがとうございます。
それでは例えば複数のテーブルからデータを取り出したクエリをレコードソースにしたレポートをwhere条件で指定したい場合などはどうしたら良いのでしょうか?

例えばレポートAはテーブルBとテーブルCからデータを取り出したクエリXがあります。
テーブルBとテーブルCは互いにサブIDでリレーションの関係にあり、クエリでテーブルBのIDとテーブルCのフィールドDを表示するとしたら、このクエリXをwhere条件でID指定する場合、どのように記述したら
よろしいのでしょうか?

補足日時:2010/10/13 23:07
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessのレポート機能でソート&抽出条件を指定したい

accessでレポート機能について、質問です。
エクセルでいうフィルタ機能みたいなものはあるのでしょうか。

例えば、以下の場合、職位="B"だけレポートで表示したい場合、
どうすればよいのでしょう?
CD 職位 所属
01  A  東京
02  B  東京 → このデータだけを表示
03  A  大阪

1)クエリを作って、レポートで表示するしかないのでしょうか?
2)レポートのデザインで条件指定ができるのでしょうか?

ソートの条件も変えたいのですが、どの項目をソートするかは、
どこで指定できるのでしょうか?

要はレポートの形式は1つで、様々な抽出条件とソート条件で
レポート表示したいのです。

Aベストアンサー

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示したいのです。
1つレポートの雛形を作って、フィルタと並べ替えのプロパティと並べ替え/グループ化の設定を変えて保存し、複数のレポートを用意する。
入力した値によって変えたい場合は、フォーム上のテキストボックスの値や特定テーブルのレコードの値にを参照するクエリを作り、レポートのレコードソースにする。
またはVBAで処理する。

p.s.
レポートの表示をボタンで起動する場合、VBAやマクロを呼び出します。
VBAやマクロでレポートを開く時に、フィルタやWhere条件式を設定できます。

>1)クエリを作って、レポートで表示するしかないのでしょうか?
>2)レポートのデザインで条件指定ができるのでしょうか?
レポートのデザインで、レポートのフィルタプロパティで、職位="B"として、フィルタ適用を"はい"にすると言う方法もあります。

>ソートの条件も変えたいのですが、どの項目をソートするかは、
>どこで指定できるのでしょうか?
レポートのデザインの「並べ替え/グループ化の設定」で行います。

>要はレポートの形式は1つで、様々な抽出条件とソート条件で
>レポート表示した...続きを読む

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

QAccessの連結、非連結とは何?

不躾な質問で恐縮なのですが、
マイクロソフトアクセス2000で、連結、非連結というような表示があると思いますが、イマイチ意味が掴めず気になってしまい、学習が進みません。

初心者なので変な質問をしているかも知れませんが、宜しくお願い致します。

Aベストアンサー

ふだん、私が連結と非連結の説明をするときというのは、
フォームなどの連結コントロールと非連結コントロールを作成するときです。

まず、名前からも分かるとおり、

連結=つながっている
非連結=つながってない

という意味になります。

具体的な例をあげますと、

 ----------------
| 名前[      ]         |
| 住所[         ]      |
|       ・             |
|       ・             |
|       ・             |
|      [OK] [キャンセル]  |
 ----------------

上記のようなフォームがあったとします。

このフォームで、[名前]や[住所]を入力すると
データは基となっているテーブルの各フィールドに保存されますよね。
このような基テーブルのフィールドと繋がっているコントロールを
”連結”コントロールといいます。
(例:名前、住所、電話番号、社員の写真など)

それに対して、[OK]や[キャンセル]といったボタンは
基テーブルのどのフィールドとも繋がっておらず、
何件目のレコードを表示してもずっと同じ状態で表示されます。
このように基テーブルのどのフィールドとも繋がっていない
コントロールを”非連結”コントロールといいます。
(例:ボタン、ロゴマーク、タイトルなど)

以上が、ふだん私が生徒さんに説明している内容です。
これでおわかりになられるとよろしいのですが。

ふだん、私が連結と非連結の説明をするときというのは、
フォームなどの連結コントロールと非連結コントロールを作成するときです。

まず、名前からも分かるとおり、

連結=つながっている
非連結=つながってない

という意味になります。

具体的な例をあげますと、

 ----------------
| 名前[      ]         |
| 住所[         ]      |
|       ・             |
|       ・         ...続きを読む

QAccessのコンボボックスの設定について(値集合ソース)

フォームのコンボボックスに表示させたい値を
値集合ソースにてSQLを直接書いています。

例を挙げますと、
テーブル:CstmTBL
項目:Cstm_ID,Cstm_Name,FLG
値集合ソース:SELECT Cstm_ID FROM CstmTBL Where FLG = '1'

ここまでであればうまくいきます。

私がやりたいのは、
このFROM句のテーブルを上位(例えば上位のコンボボックスで指定したテーブル名)で設定し、
そこで設定されたテーブルを毎回そのSQLに埋め込んで抽出されるようにしたいのですが、うまくいきません。VBAを書かないとだめでしょうか?
書くとすれば、書き方も教えていただけますか?

よろしくお願いいたします。

Aベストアンサー

No.2です。

前回のVBAをより明示的(?)にしてみます:

Private Sub 指定テーブル_AfterUpdate()
[表示コンボ].RowSource = "SELECT Cstm_ID FROM " & [指定テーブル] & " Where FLG = 1"
End Sub

つまり、「[指定テーブル]」は「指定テーブル」というテキストではなく、「指定テーブル」コンボボックスに入力した値を参照することを意味しています。

> その抽出結果をどう次のコンボボックスに引き渡すのでしょうか?

「次のコンボボックス」の名前が、上の例では「表示コンボ」となっています。
つまり「表示コンボ」コンボボックスの「.RowSource」(=値集合ソース)に、上記演算結果を代入することを意味しています。

例えば、「指定テーブル」コンボボックスに「CstmTBL」を入力すると、「表示コンボ」コンボボックスの値集合ソースには、
  "SELECT Cstm_ID FROM " & [指定テーブル] & " Where FLG = 1"
の演算結果である
  SELECT Cstm_ID FROM CstmTBL Where FLG = 1
が入力されることになります。
「指定テーブル」に「AnotherTBL」を入力した場合は、同様に
  SELECT Cstm_ID FROM AnotherTBL Where FLG = 1
が入力されます。


「AfterUpdate」(=更新後処理)というのは、「そのコントロールの更新後に実行される処理」なので、上記VBAを記述しておけば、「指定テーブル」コンボボックスを更新により、自動的に「表示コンボ」コンボボックスの値集合ソースが切り替えられることになります。

もし疑問点がありましたら、遠慮なくご質問下さい。

No.2です。

前回のVBAをより明示的(?)にしてみます:

Private Sub 指定テーブル_AfterUpdate()
[表示コンボ].RowSource = "SELECT Cstm_ID FROM " & [指定テーブル] & " Where FLG = 1"
End Sub

つまり、「[指定テーブル]」は「指定テーブル」というテキストではなく、「指定テーブル」コンボボックスに入力した値を参照することを意味しています。

> その抽出結果をどう次のコンボボックスに引き渡すのでしょうか?

「次のコンボボックス」の名前が、上の例では「表示コンボ」となっています。
...続きを読む

QアクセスVBAのMe!と[ ]

基本的なことですみません。

アクセスのイベントプロシージャで、Me!ってありますけど、これはどういう意味なんでしょうか?

また、Me!の後に、Me!.~~と書く場合と、Me!.[~~]と書く場合がありますが、どこが違うのでしょうか?

Aベストアンサー

>プロシージャ内で[]を使う場合は、そのフォーム外のオブジェクトを使う場合と考えてよろしいでしょうか?
別のオブジェクトを使う場合だけではありません。
Hensu = Me![Text1]のようにHensuという変数に自身のTest1の値を代入する場合のように。
[]で括られているのがオブジェクト名やコントロール名だよという事。
クエリの抽出条件に存在しない[?]とすれば?というコントロール等が参照できないので?というダイアログが表示されるように?というオブジェクトやコントロールは何?と聞いてくるように。
>フォーム内のオブジェクトの場合はあくまでMe!で良いのでしょうか
Forms.[フォーム名]![コントロール名]やForms![フォーム名]![コントロール名]が構文。
アクティブなフォームが自分自身ならForms![フォーム名]の変わりにMeでもOKですという事。

と言う解釈の方が良いと思います。

QAccessのフォーム上にレコード数とレコード番号の表示

Accessでクエリを元に表示するフォーム上で、テキストボックス等に関数を使って、レコード数とレコード番号を表示する方法がありましたら教えてください。

フォームの書式設定で「移動ボタン」の表示をすれば目的の事は出来るのですが、表示の大きさが調整できない為、とても見難いのです。

以上よろしくお願いします。

Aベストアンサー

レコード番号のコントロールソースを
=[CurrentRecord]
レコード数のコントロールソースを
=Count("*")-[NewRecord]
としてみてください。

QACCESS で マクロの中でフィルタを使用する方法

ACCESS初心者です
フォームを使用してテーブルのデータを単にマクロでフィルタ実行をかけて検索をしたいのですが、where条件式のところで文字列をあいまい検索したいのです。(フォームでテーブルの項目の一部を入力して検索をかけたい)like * を使用したいのですが記述の方法がわかりません。教えてください。
よろしくお願いいたします!

Aベストアンサー

No.2です。

> 現在[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] と式を入れている

「顧客情報検索」フォームの「顧客カナ」コントロールの値であいまい検索をしたい、ということですね。
でしたら、以下のように変えれば可能になると思います。

現在:
[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ]
変更後:
[顧客マスタ]![顧客カナ] Like "*" & [Forms]![顧客情報検索]![顧客カナ] & "*"


これで、「顧客カナ」に入力した文字列を含むものを検索できます。
なお、「先頭一致/後方一致をユーザーが選択できるようにしたい」という場合は、

変更後:
[顧客マスタ]![顧客カナ] Like [Forms]![顧客情報検索]![顧客カナ]

としておいた上で、ユーザーに「*」を含めて入力してもらう、というのが、プログラムを
組む側としては一番簡単かと思います。
(「モリ」を含む場合は「*モリ*」、「モリ」で始まる場合は「モリ*」、「モリ」で終わる場合は
 「*モリ」、「モリ」の完全一致の場合は「モリ」と、それぞれ入力してもらいます)

No.2です。

> 現在[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ] と式を入れている

「顧客情報検索」フォームの「顧客カナ」コントロールの値であいまい検索をしたい、ということですね。
でしたら、以下のように変えれば可能になると思います。

現在:
[顧客マスタ]![顧客カナ]=[Forms]![顧客情報検索]![顧客カナ]
変更後:
[顧客マスタ]![顧客カナ] Like "*" & [Forms]![顧客情報検索]![顧客カナ] & "*"


これで、「顧客カナ」に入力した文字列を含むものを検索できます。
なお...続きを読む

QACCESS でフォームフィルターをレポートに引き継ぐ方法

こんにちは。
いつもありがとうございます。

現在、ACCESSで名簿管理ソフトを作っています。
フォームで条件を指定し、該当する人を抽出できるようになっているのですが、その条件をそのままレポートのソースに使用するにはどうれすばいいでしょうか?

DoCmd.OpenReport "rpt_名簿", acViewPreview,, Me.Filter
としているのですが、実行時エラー 438が出てしまいます。

Aベストアンサー

発想を変えましょう
レポートの開くときイベントでフォームのフィルタを引き継げばいいのです

Private Sub Report_Open(Cancel As Integer)
Me.Filter = Forms![フォーム名].Filter
Me.FilterOn = True
End Sub

Qアクセスで特定のレコードのみのレポートを印刷したいのですが。

アクセス2003である特定のレコードのみのレポートを印刷したいと思っています。現在開いているフォームのレコードのみを印刷(レポートとして)印刷するには、ファイル→印刷→ページ指定で現在印刷しているのですが、他に方法はないでしょうか?単に「レポートの印刷」とすると全てのレコードが印刷されてしまいます。今のところ特定のレコードのみ印刷するには、まずページ数を調べなければいけないので不便です。せっかくパラメータクエリなどで、そのレコードのフォーム画面を表示させても、レポート印刷につながらないので、どなたか良い方法を教えていただけないでしょうか?よろしくお願いいたします。

Aベストアンサー

レポートの基となるクエリを開きます。
フォームに表示されている項目の中で主キーとなるフィールドがどれかを決めます。
そのクエリの中でその主キーフィールドのWHERE条件の欄を選択してビルドを開きます。
レポートを選択するフォームの一覧を開きます。
先ほど選んだ主キーの項目を選んでダブルクリックします。
Ok
そうすれば、フォームから印刷ボタンを押せば開いているページだけが印刷されます。
但し、複数ページの指定をするには、更に複雑な設定が必要ですが、
今の照会した方法を応用すればできるはずです。

Qアクセスのフォームのビューが表示されないのですが、

Accessでフォームを作っているのですが、クエリを元にウイザードで作成。デザインビューではちゃんと文字が出ているのに、データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけなんですが、何が原因なのでしょうか? 同じ作り方で出来る物もあるのですが、アクセスは初心者です。本を見てもわからないのですが、教えて下さい。よろしくお願い致します。
参考になるURLがあれば、それも教えて頂きたいです。

Aベストアンサー

> データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけ

表示されるレコードがなく、追加もできない(=新規レコードの枠が表示されない)状態
の場合、フォームビューの詳細領域にあるコントロールは、全て表示されなくなります。

これはAccessがそういう仕様になっているようなのでどうしようもないのですが、
詳細領域ではなくフォーム ヘッダ/フッタに設置したコントロールであれば表示は
されるので、表示レコードがない場合にも表示が必要なコントロール(フォームを閉じたり
表示を切り替えるコマンドボタンや、フォームの抽出条件を指定するテキストボックス等)
はフッタ/ヘッダに移動する、といった回避方法があります。

フォーム ヘッダ/フッタを表示するようにするには、フォームをデザインビューで開き、
メニューで「表示(V)→フォーム ヘッダ/フッタ(H)」を選択します。
ヘッダのみ、またはフッタのみ必要な場合は、不要な方の下端にマウスポインタを
合わせて、水平な線と上下矢印を組み合わせた形になったところで、マウスをクリック&
ドラッグして下さい。


※本来表示させるレコードがない状態で、詳細領域のコントロールを強引に表示させる
  には、フォームのプロパティシートの『データ』タブで、『レコードセット』の設定を
  「ダイナセット (矛盾を許す)」にするという手もあります。
  但し、変な形でレコード編集がされてしまう危険性が生じますので、お勧めはできません。


参考までに、以前の回答へのリンクも載せておきます:
http://oshiete1.goo.ne.jp/qa3371589.html
http://oshiete1.goo.ne.jp/qa3028994.html

> データシートビューでも1行目に項目が出ているのに、フォームビューは壁紙だけ

表示されるレコードがなく、追加もできない(=新規レコードの枠が表示されない)状態
の場合、フォームビューの詳細領域にあるコントロールは、全て表示されなくなります。

これはAccessがそういう仕様になっているようなのでどうしようもないのですが、
詳細領域ではなくフォーム ヘッダ/フッタに設置したコントロールであれば表示は
されるので、表示レコードがない場合にも表示が必要なコントロール(フォームを閉じたり
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング