• ベストアンサー

アクセス2007の抽出

アクセス2007の抽出 クエリをもとに検索画面を作り部署の抽出をします、 検索画面は 部署名:部署名を入力するところ    コマンドボタンで実行です     クエリの部署のフィールドのところに[部署]としていますが 部署を複数抽出する場合どうしたらいいかわかりません。 [部署]のパラメータのところに部署名ひとつ「総務」と入れると総務を抽出してくれます これを部署を複数抽出したい場合はどうしたらできますか?たとえば総務と経理を抽出 したい場合 部署は30くらいあります。 説明がよく出来なくてすみません どうぞよろしくお願いいたします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

抽出条件に "総務" Or "経理" ですが、こういうことではなく?

その他の回答 (15)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.16

それから、一度最適化をしてみてください。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.15

コードは問題ないのですが、一度以下の二つの方法を やってみてください。 名前の自動修正については、以下にあります。 http://office.microsoft.com/ja-jp/access-help/HA010256413.aspx (1) 「名前の自動修正を行なう」のチェックをはずす。 OKとする。 検索を行なってみる。 (2) 同様に 「名前の自動修正情報をトラックする」のチェックをはずす。 OKとする。 検索を行なってみる。 それから、Access2007のSPのバージョンはどのように なっていますか。SP2、あるいはSP3、あるいはノーマルの ままバージョンアップは行なっていない、のどれでしょうか。 確認ですが、Q_Temp検索が消えるというのはデータベース ウィンドウから消える、ということで、オブジェクトの 依存関係の表から消える、ということではないですね。 消えた後には、新たに作成されないということですね。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.14

一度提示したサンプルを使ったフォームの 作り方などをおさらいしておきます。 (1) フォームを作ります。名前はfrm検索とします。 (2) フォームにリストボックスを適当な長さ、大きさで 張り付けます。リストボックスのプロパティを開いて 名前をlst検索とします。また、複数検索のところを 標準にします。 (3) フォームに二つのテキストボックスを貼り付け、 それぞれのプロパティを開いて、それぞれの名前を、 tx日付FROM tx日付TO  とします。 (4) コマンドボタンをフォームに貼り付け、 プロパティを開いて名前をcmd検索とし、 プロパティのクリック時イベントから コード表を開いて、 Private Sub cmd検索_Click() Call mkSQL End Sub とします。 (4) 同じ、コード表に Private Sub mkSQL() のコードをすべて張り付けます。 このコードは#11のコードでも かまいません。 (5) テーブルを テーブル名はテーブル1 各フィールドは以下のように作成。 (部署(テキスト型)、日付(日付/時刻型)、スケジュール(テキスト型)) 以上のようにしてみてください。  >今回、消えたのはfrm検索を動かそうとしている時何かを  >やってしまい消えてしまったのでしょうか?   >実はクエリの作成でQ_Temp検索を作り再度、frm検索を動かしたら  >それまで 消えてしまいました。 プログラム上は無ければ作るようになっているのですが、 プログラムのどこか変更しています? >こりずによろしくお願いいたします。 このくらいならタエラレます。 http://oshiete1.watch.impress.co.jp/qa5995365.html

lotsqq
質問者

補足

piroin654さん ありがとうございます。 >プログラム上は無ければ作るようになっているのですが、 >プログラムのどこか変更しています?  何も違うところはなく教えていただいたままに作っています。 全部、おさらいしてみました、なんとまたQ_Temp検索が消えてしまいました。 frm検索から日付とスケジュールを選択してcmdボタンをクリックすると Q_Temp検索がパッと消えます。 下記を貼り付けています。 Option Compare Database Private Sub cmd検索_Click() Call mkSQL End Sub Private Sub mkSQL() Dim db As Database Dim qdf As QueryDef Dim ctl As Control Dim strKey As String Dim strSQL As String Dim varitm As Variant Set db = CurrentDb On Error Resume Next '前回作成したクエリを削除。二重作成によるエラーの回避’ For Each qdf In db.QueryDefs If qdf.Name = "Q_Temp検索" Then DoCmd.DeleteObject acQuery, "Q_Temp検索" End If Next qdf Set ctl = Me!lst検索 For Each varitm In ctl.ItemsSelected strKey = strKey & ",'" & ctl.ItemData(varitm) & "'" Next varitm strKey = Mid(strKey, 2) strSQL = "SELECT テーブル1.部署, テーブル1.日付, テーブル1.スケジュール " & _ "FROM テーブル1" & _ "WHERE (((テーブル1.部署) In (" & strKey & "))AND((テーブル1.日付) " & _ "Between [Forms]![frm検索]![tx日付FROM] " & _ "And [Forms]![frm検索]![tx日付TO]));" Set qdf = db.CreateQueryDef("Q_Temp検索", strSQL) DoCmd.OpenQuery ("Q_Temp検索") qdf.Close Set qdf = Nothing db.Close Set db = Nothing End Sub 同じですね? よろしくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.13

追加ですが、 最初のデータベースにはQ_Temp検索 は存在しませんが、 プログラムを実行している状態では、 あたかもQ_Temp検索という名前の クエリがずーーーーっと存在している ように状態です。なければ新たに 作り直す、あれば、一度つくり直す というようにプログラム されています。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.12

肝心な説明が抜けていました。 >Q_Temp検索が消えてしまいました、 >frm検索を実行させたために消えたのか >その前からなかったのかは不明です。がっかりです。 がっかりさせてしまいました。実はプログラムでは 最初にQ_Temp検索という名前のクエリは存在しないのです。 最初に、プログラムを実行するとそのとき初めて Q_Temp検索という名前のクエリが作られます。 このクエリはプログラムを実行するたびに内容が 書き換えられるのでプログラムを実行するごとに 最初にQ_Temp検索という名前のクエリを一度削除し、 また同じ名前のQ_Temp検索を作成するようにプログラム しています。Q_Temp検索1あるいはQ_Temp検索2 のような名前だと同じとは見なさないので 削除はしません。

lotsqq
質問者

補足

piroin654さん ありがとうございます。 すごく解りやすく助かります。 >最初にQ_Temp検索という名前のクエリは存在しないのです。 >最初に、プログラムを実行するとそのとき初めて >Q_Temp検索という名前のクエリが作られます。  はい、コードをみるとなんとなくですが理解できます  今回、消えたのはfrm検索を動かそうとしている時何かを  やってしまい消えてしまったのでしょうか?   実はクエリの作成でQ_Temp検索を作り再度、frm検索を動かしたら  それまで 消えてしまいました。  また、試してみます。     こりずによろしくお願いいたします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.11

Private Sub mkSQL() Dim db As Database Dim qdf As QueryDef Dim ctl As Control Dim strKey As String Dim strSQL As String Dim varitm As Variant Set db = CurrentDb On Error Resume Next '前回作成したクエリを削除。二重作成によるエラーの回避 For Each qdf In db.QueryDefs If qdf.Name = "Q_Temp検索" Then 'Q_Temp検索という名前のクエリがあれば以下で削除 DoCmd.DeleteObject acQuery, "Q_Temp検索" End If Next qdf 'リストボックスで選択された項目の取得 Set ctl = Me!lst検索 For Each varitm In ctl.ItemsSelected strKey = strKey & ",'" & ctl.ItemData(varitm) & "'" Next varitm 'リストボックスから取り出した項目の整形 strKey = Mid(strKey, 2) 'リストボックスから取り出した項目とテキストボックスの日付 'をSQL文に設定 strSQL = "SELECT テーブル1.部署, テーブル1.日付, テーブル1.スケジュール " & _ "FROM テーブル1 " & _ "WHERE (((テーブル1.部署) In (" & strKey & ")) AND ((テーブル1.日付) " & _ "Between [Forms]![frm検索]![tx日付FROM] " & _ "And [Forms]![frm検索]![tx日付TO]));" 'SQL文をもとにQ_Temp検索という名前のクエリを作成 Set qdf = db.CreateQueryDef("Q_Temp検索", strSQL) 'Q_Temp検索という名前のクエリを表示 DoCmd.OpenQuery ("Q_Temp検索") '以下は後始末 qdf.Close Set qdf = Nothing db.Close Set db = Nothing End Sub

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.10

一応、Q_Temp検索という名前のクエリが存在すれば プログラムの設計上削除するようになっています。 [frm検索を実行したときのプログラムの流れの説明] 1 Q_Temp検索というクエリが存在しないか確認 2 Q_Temp検索というクエリが存在すれば二重作成   のエラー回避のためにこの名前のクエリを削除 3 Q_Temp検索という名前のクエリを作成する情報を  フォームのテキストボックスとリストボックスから  取得 4 Q_Temp検索という名前のクエリを作成 5 Q_Temp検索を表示 という流れになります。したがって、Q_Temp検索という 名前のクエリがあれば最初に削除するので、もしその クエリを保存したいのならば、他の名前に変更しておい てください。たとえば、Q_Temp検索1、あるいはまったく 別の名前に変更。 コードの説明をコード表に入れておきました。 そのままコード表に張り付けてもいいです。 'ボタンをクリックします。 Private Sub cmd検索_Click() 'mkSQLというコードを呼び出します。 Call mkSQL End Sub

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.9

SQL文中の半角スペースについて たとえば、 "FROM テーブル1 " & _ の 1 と " の間には半角スペースが入っています。 また、 "WHERE (((テーブル1.部署) In (" & strKey & ")) AND ((テーブル1.日付) " & _ の ) AND ( の部分も ) と AND と ( の間にはそれぞれ半角スペースが 入っています。

lotsqq
質問者

補足

piroin654さん お世話になります。 呆れずに聞いてください。 Q_Temp検索が動いたと言って、frm検索からやってみようとすると Q_Temp検索が消えてしまいました、frm検索を実行させたために消えたのか その前からなかったのかは不明です。がっかりです。 作成のクエリからやるべきですか? よろしくお願いします。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.8

それと、回答ではテーブル1になっていますが、 これはクエリに置き換えても結果は同じです。 こちらでは、テーブル1を、いくつかのテーブルの 組み合わせによるクエリに置き換えて抽出もしています。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

クエリ式’(((テーブル1部署)In())AND((テーブル1日付)Between[Forms]![frm検索]! [tx日付FROM]And[froms]![frm検索]!「tx日付TO」))'の構文エラー:;演算子がありません もし、このようなエラーならば、二つのANDが前後と くっついているのでAccessがSQL文を解釈できなく なっている、と思われます。 コード中のSQL文はAccessがSQL文として解釈できる ように半角のスペースが構文中や構文の途中の末尾 などに入れてあります。もしSQL文を手直しされたならば 一度、張り付けた状態でそのまま使ってみてください。 なお、張り付けるときは、コード表の一番左端に張り付けて ください。 また、Q_Temp検索をデザインビューで開いてSQLビュー にすると、以下のようなSQL文が出てきます。 SELECT テーブル1.部署, テーブル1.日付, テーブル1.スケジュール FROM テーブル1 WHERE (((テーブル1.部署) In ('経理部','人事部')) AND ((テーブル1.日付) Between [Forms]![frm検索]![tx日付FROM] And [Forms]![frm検索]![tx日付TO])); これは、実際にリストで経理部、人事部と選んだ状態の もので、これに日付を入れればクエリが結果を表示 します。このまま日付を無視して開くと空の クエリ結果が表示されます。 もし、他に表示するクエリ、またはテーブルの フィールドがあるならば、いくつか入れたSQL文を 表示してもいいですが。 コード中のSQL文はここに張り付けたときに 長いと改行されてエラーを起こしたり、 分かりにくくなったりするのを防ぐために 少し短めに区切ってあります。

lotsqq
質問者

補足

piroin654さん お世話になります。 途中経過ですが、 Q_Temp検索動きました。本当に良かったです。 まだfrm検索はこれからです。 また、よろしくお願いいたします。

関連するQ&A

  • アクセス 抽出

    パラメータクエリで同じフィールド内の項目を複数抽出したいです 今までは [ああああ] or [bbbb] と抽出条件のところに書けばで来たのですが、できなくなって しまいました、ああああ または bbbbどちらか一方なら抽出できます いろいろ探しましたが解決できません よろしくお願い致します。

  • ACCESS クエリの抽出条件

    毎度お世話になります。 クエリをレコードソースとするフォームから、コマンドボタンでアクションクエリを実行するときの抽出条件の書き方を教えて頂けないでしょうか? 二つのテーブル(別のACCESSファイルからリンク)を基にパラメータクエリを作っています。 そのクエリを基にフォームを作っています。 さらに、そのフォームに追加クエリを実行するボタンを置いています。 フォームに表示してあるレコードだけ(パラメータで抽出されたレコードだけ)、他のテーブルに追加しようと思っているのですが、実行ボタンを押すともう一度パラメータが出てきてしまいます。 多分テキストボックスの値を読み取る際にレコードソースがテーブルでないのが問題じゃないかと思うのですが。。。 テーブル:Container / Items クエリ:From_Con(パラメータは[Container]フィールド) フォーム:From_Con(テキストボックス名は[txtContainer]) 追加クエリ:From_Con_App(抽出条件は[Forms]![From_Con]![txtContainer]としてみたがうまく動きません。) デザインビューの抽出条件を使う方法? SQLを使う方法? QueryDefを使う方法? いろいろありそうですが、ネットで検索してもヒットしません。 分かりにくい説明で申し訳ありませんがご教授願います。

  • 【Access】フィールドにつけた別名を同じクエリで抽出に使いたいです

    【Access】フィールドにつけた別名を同じクエリで抽出に使いたいです。 Access2003を使っています。 困っている状況は以下のようなもです。 ■テーブル1  ・フィールド1 ■クエリ1  ・フィールドA:フィールド1  ・フィールドB:[フィールドA]   【抽出条件】>=10 このような条件で、クエリを実行すると、 「パラメータの入力 フィールドA」というダイアログが立ち上がってしまいます。 上記載のクエリ1でフィールドAの[]は自然についてしまうのではずせません。 今はもう一つクエリを作る事でこの状況はなんとかしましたが、フィールドに別名をつける毎にクエリを作るとクエリの数が多くなってしまうので困っています。 クエリでフィールドに別名をつけた場合は、そのクエリ上でその別名を使って抽出をかけることはできないのでしょうか? よろしくお願いします。

  • アクセスでクエリーによる抽出方法

    アクセスでクエリーによる抽出方法を教えてください。 例えばテーブルに    フィールド1  フィールド2  フィールド3    ---------------------------------------      a     100     700       a      200     600       a     300     700 とします。そしてすべてクエリーにとりこみます。ここから抽出するのですが、      フィールド1  フィールド2   フィールド3    ---------------------------------------       a        100    700        a        200     600        a        300   700 抽出条件   [問1] または           [問2]                     [問3] 上記はクエリーのデザインビューですが、[問1]、[問2]、[問3]のパラメータすべてを入力するのであれば何も悩みません。しかし例えばフィールド1は"a"でフィールド2は検索せず(検索対象からはずす)、フィールド3は"700"を検索したい場合、[問1]では"a"を入力し、、[問2]は何も入力しなくて、[問3]は"700"を入力し検索すると、   フィールド1  フィールド2  フィールド3   ---------------------------------------      a    100    700      b    200    600      c    300    700   となるのです。どうにかして フィールド1  フィールド2  フィールド3 --------------------------------------    a     100     700  というような検索結果をだしたいのです。 アクセス初心者です。お願いします。

  • Accessでデータベースを作っています。

    Accessでデータベースを作っています。 先日、こちらで質問をさせていただいて、クエリで複数のフィールドを対象にデータを検索する ことはクリアできました。 ありがとうございました。 ご指導に基づき、4つのフィールド(仮にA,B,C,D)について、クエリの抽出条件に  Like "*" & [Aを入力] & "*"  Like "*" & [Bを入力] & "*" ・・・ とそれぞれ設定してパラメータ入力を求め、4つの条件すべて、または一部のみ設定して検索し、 正しい検索結果が得られました。 今度は、検索用のフォームを作成し、フォームで入力した条件をクエリに送って、同じ結果を 得たいと思うのですが、以下の方法では正しい検索結果が出てきません。 ・フォームに検索用のボックスをA~Dまで4つ作成(ひとつはコンボボックス、あとはテキスト) ・クエリの抽出条件に、それぞれ以下を入力     Like "*" & [Forms]![Q_form(作成したフォームの名前)]!                       [A(それぞれの検索ボックスの名前)] & "*" ・フォームに「クエリの実行」のコマンドボタンを配置 パラメータで入力する代わりにフォームを使いたい、というものなのですが(パラメータ入力 よりも、コンボボックスを使って値を選ぶ方が検索する人には使いやすいかと思って)、どうしたら うまいこといきますでしょうか。。 教えてください。

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • Access2000 抽出について

    どうしてもわからないので教えてください。 選択クエリで、「フリガナ」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![カナ検索]),"*",[Forms]![F_顧客検索]![カナ検索] & "*") でフォームからクエリを実行させるようにしているのですが、 フリガナが空白のレコードは抽出されてくれません。 「*」でなく、なんと入れればいいのでしょうか? ちなみに他に、「自宅電話番号」というフィールドに、 Like IIf(IsNull([Forms]![F_顧客検索]![電話検索]),"*" & "*",[Forms]![F_顧客検索]![電話検索] & "*") など、似たような感じで抽出をかけています。 よろしくお願いします。

  • Accessのクエリの抽出条件で・・・

    Accessのクエリの抽出条件で、例えば住所フィールドがあってそこから、「東京都と大阪府と福岡県」以外を抽出してくる、と言ったような場合はどのように入力すればいいのでしょうか?「<>」や「Not」を用いてand関数も用いてるのですがうまくいきません。入力の仕方が間違っているのでしょうか?またそれをパラメータクエリで行えるように設定したい場合はどのようにすればいいのでしょうか?お教え下さい。よろしくお願い致します。

  • Access2003 テキストボックスの値によるクエリの抽出条件

    コマンドボタンによるクエリの実行と、直接クエリを実行する(マウスでクリック) するのとで、動作が変わってしまいます。 F_メインメニュー(フォーム)内の非連結のテキストボックスtext1に文字列を入力し、 その隣に配置した検索ボタンを押すことで、テキストボックスの値を含む住所を 抽出するよう、Q_顧客を作成したのですが、F_メインメニュー内にある テキストボックスに文字列を入れ、F_メインメニューを開いたまま 直接、Q_顧客をマウスクリックにより実行すると、 確かに該当する値を含む住所をもつレコードのみがヒットします。 しかし、テキストボックスの横に配置した、コマンドボタンによる クエリの実行をすると、条件抽出されず、全件ヒットしてしまいます。 直接、Q_顧客をマウスによってクリック実行するとできるのに、 なぜコマンドボタンにコマンドボタンがクリックされたらQ_顧客を実行するよう ウィザードで作ると同じ動作にならないんでしょうか? コマンドボタンにはクリックされたらQ_顧客を実行するようにウィザードで 作成しています。 ご教授よろしくお願いします。 **以下作成状況** 「フォーム名」: F_メインメニュー ※このF_メインメニュー内に非連結のテキストボックスtext1を作成。 テキストボックスの横に検索ボタン(コマンドボタン)を作成し、 検索ボタンをクリックしたら、以下のQ_顧客を実行するよう、 コマンドボタンをウィザードで作成。 「テーブル名」: T_顧客 ※フィールドに「住所」あり。 「クエリ名」: Q_顧客 ※ ウィザードでT_顧客からクエリを作成(この時点では抽出条件設定なし) クエリの抽出条件で フィールド:住所 の抽出条件に以下を設定 Like "*" & [Forms]![F_メインメニュー]![text1].[Text] & "*"

  • Accessクエリで100年単位で抽出したい

    いつも、お世話になります。 Win7, Access2013 パラメータクエリで行き詰まっています。ご存知の方がいらっしゃいましたら、ご教示お願いします。 年月日のコントロールがあり、yyyy/mm/dd の書式から 1900年代を抽出したいのです。 月だけを抽出したい場合、webの事例で フィールド:Format([年月日],"mm") にして、パラメータクエリで 05 と入力すると 5月のリストが抽出できるようになりました。 パラメータクエリで、この年月日に「1900」又は 「19」と入力すると 1900年代のリストが抽出できるようしたいのです。 ご存知の方がいらっしゃいましたら、ぜひお願いいたします。

専門家に質問してみよう