電子書籍の厳選無料作品が豊富!

アクセス2007の抽出

クエリをもとに検索画面を作り部署の抽出をします、
検索画面は
部署名:部署名を入力するところ    コマンドボタンで実行です    

クエリの部署のフィールドのところに[部署]としていますが
部署を複数抽出する場合どうしたらいいかわかりません。

[部署]のパラメータのところに部署名ひとつ「総務」と入れると総務を抽出してくれます
これを部署を複数抽出したい場合はどうしたらできますか?たとえば総務と経理を抽出
したい場合
部署は30くらいあります。

説明がよく出来なくてすみません
どうぞよろしくお願いいたします。

A 回答 (16件中1~10件)

抽出条件に



"総務" Or "経理"

ですが、こういうことではなく?
    • good
    • 0

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

    • good
    • 0

コードは問題ないのですが、一度以下の二つの方法を


やってみてください。
名前の自動修正については、以下にあります。
http://office.microsoft.com/ja-jp/access-help/HA …


(1)
「名前の自動修正を行なう」のチェックをはずす。
OKとする。

検索を行なってみる。



(2)
同様に
「名前の自動修正情報をトラックする」のチェックをはずす。
OKとする。

検索を行なってみる。



それから、Access2007のSPのバージョンはどのように
なっていますか。SP2、あるいはSP3、あるいはノーマルの
ままバージョンアップは行なっていない、のどれでしょうか。


確認ですが、Q_Temp検索が消えるというのはデータベース
ウィンドウから消える、ということで、オブジェクトの
依存関係の表から消える、ということではないですね。

消えた後には、新たに作成されないということですね。
    • good
    • 0

一度提示したサンプルを使ったフォームの


作り方などをおさらいしておきます。

(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

この回答への補足

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

同じですね?
よろしくお願いいたします。

補足日時:2010/08/19 17:26
    • good
    • 0

追加ですが、


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

肝心な説明が抜けていました。



>Q_Temp検索が消えてしまいました、
>frm検索を実行させたために消えたのか
>その前からなかったのかは不明です。がっかりです。


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

この回答への補足

piroin654さん
ありがとうございます。
すごく解りやすく助かります。

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

補足日時:2010/08/18 21:26
    • good
    • 0

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
    • good
    • 0

一応、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
    • good
    • 0

SQL文中の半角スペースについて



たとえば、

"FROM テーブル1 " & _

の 1 と " の間には半角スペースが入っています。

また、

"WHERE (((テーブル1.部署) In (" & strKey & ")) AND ((テーブル1.日付) " & _



) AND (

の部分も ) と AND と ( の間にはそれぞれ半角スペースが
入っています。

この回答への補足

piroin654さん
お世話になります。
呆れずに聞いてください。
Q_Temp検索が動いたと言って、frm検索からやってみようとすると

Q_Temp検索が消えてしまいました、frm検索を実行させたために消えたのか
その前からなかったのかは不明です。がっかりです。
作成のクエリからやるべきですか?

よろしくお願いします。

補足日時:2010/08/18 14:17
    • good
    • 0

それと、回答ではテーブル1になっていますが、


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

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