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

またまたAccessについての質問です。
検索フォームというのを作りました。
テーブルのデータから条件に合うものだけを抽出したいのです。
たとえば1つ目の検索フォーム[A]のテキストボックスに「AAA」を入力します。
そのあとBには「BBB」と入力します。
同じくCには「CCC」と入力します。
そして絞込みボタンを押したらAAAでBBBでCCCのものが抽出されます。
これはうまくいきました。
とりあえず、複数条件なので、わけもわからず「&」で結んでしまいました・・・。
↓は絞込みボタンのクリック時です。↓

困ったのは、すべて検索条件を指定しない場合です。
たとえば「AAA」で「CCC」のものを抽出したいとき、[A]のテキストボックスに「AAA」と入れ
[C]のテキストボックスに「CCC」と入れます。
そして絞込みボタンをクリック。
するとBが未記入だからか、抽出されたのは真っ白でした・・・。

Option Compare Database

Private Sub コマンド50_Click()
Me.Filter = "契約='" & Me!テキスト51 & "'and A='" & Me!テキスト57 & "'"
Me.FilterOn = True
End Sub

組み合わせが自由になる検索フォームにするにはどうすればよいのでしょうか?
誰か助けてくださ~い!

A 回答 (6件)

>ところが、「A」と「B」というような「契約」が入ってない条件で抽出すると・・・真っ白になりました。


なぜなのでしょうか???


「契約」の入力の有無にかかわらず、抽出条件に指定されているためです。


ここの部分です。

sFilter = "契約='" & Me!テキスト51 & "'"


入力がないときに抽出条件から外したいのなら、

sFilter = ""
IF IsNull(Me!テキスト51) = False Then
 sFilter = "契約='" & Me!テキスト51 & "'"
End IF

としなければなりません。

ただ、これだと「契約」が未入力のとき、sFilterの内容は、

「and A='xxxxx' and B='yyyyy'」

のように、「and」から始まってしまいます。
これではエラーになります。

対策として、ダミーの条件をいれましょう。
つまり、

sFilter = "1=1"
IF IsNull(Me!テキスト51) = False Then
 sFilter = "and 契約='" & Me!テキスト51 & "'"
End IF

というようにします。
こうすると、sFilterの内容は、

「1=1 and 契約='qqqqq' and A='xxxxx' and B='yyyyy'」
もしくは
「1=1 and A='xxxxx' and B='yyyyy'」

のようになります。



できるだけ仕組みを覚えてくださいね。
そうしないと、直すことができないですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
がんばってやってみます。
いろいろ本を読んだりしたのですがいまいち分からなくて・・。
何かオススメの本があったらまた教えてください。
ほんとにありがとうございました。

お礼日時:2004/07/23 20:59

#3です。



>(初心者なもので、基本的な質問ですみません)

なるほど。。。


少し、解説しておきます。

●意味がわかれば簡単です

・「Me」は自分のフォームを指しています。
・「Me.A」とすると「このフォームの中にあるAという名前のコントロール」となります。
・「If IsNull(Me.A) = True Then」は、「Aというコントロールに入力がなかったら」となります。
 (「End If」まで実行されます)


●テキストボックスの名前は関係あります。

 修正・変更などのように、後で見るときのために、適切な名前に変えておくといいでしょう。

 今の状態だと、

 If IsNull(Me.A) = True Then
  sFilter = sFilter & " and A='" & Me.A & "'"
 End IF

 は、

 If IsNull(Me.テキスト57) = True Then
  sFilter = sFilter & " and A='" & Me.テキスト57 & "'"
 End IF

 のようになります。
 (上のコードは、全角スペースを入れたので、コピペできません)

 *回答したときには、名前に気が付かなかったので、申し訳ないです。

 そのまま貼り付けただけだと、「コントロールがありません」とかいうエラーが
 でそうな気がしますけど。。。何故?


 わからない箇所があれば、また聞いてください。

この回答への補足

お久しぶりですみません。

あれからやってみたのですが、90%はできました!!
「契約」と「A」の組み合わせとか、「契約」と「B」の組み合わせとか、「契約と「A」と「C」の組み合わせでうまく抽出できました。
ところが、「A」と「B」というような「契約」が入ってない条件で抽出すると・・・真っ白になりました。
なぜなのでしょうか???
またよろしくお願いします。

補足日時:2004/07/22 21:17
    • good
    • 0
この回答へのお礼

何度も何度もご親切にありがとうございます!
今から仕事に行ってやってみます!
また夜に報告します。
ありがとうございました(^-^)

お礼日時:2004/07/16 07:02

#3です。



そうですね。同じようにすればOKです。
(全く同じではでないですけど)

次のような感じになります。


'テキストボックスC
If IsNull(Me.C) = False Then
sFilter = sFilter & " and C='" & Me.C & "'"
End IF

の後ろに次のコードを追加します。

'テキストボックス(開始日付)
If IsNull(Me.txStartDate) = False Then
sFilter = sFilter & " and " & Me.txStartDate & "<=date"
End IF

'テキストボックス(終了日付)
If IsNull(Me.txEndDate) = False Then
sFilter = sFilter & " and date<=" & Me.txEndDate
End IF


ただし、
・txStartDateは開始日付のテキストボックス
・txEndDateは終了日付のテキストボックス
・dateはテーブルの日付フィールド名
・日付のフィールドが、どのように定義されているか不明なので、
 上記のコードのままではうまくいかない可能性はあります。
 その場合、日付フィールの型に合わせた記述をする必要があります。


を表しています。

また、開始日付と終了日付は一方のみの入力で動作します。

この回答への補足

またまたありがとうございます!
昨夜から帰ってやってみたのですが、いろいろ触ったからでしょうか?うまく出来ていた検索ができなくなってしまいまいした・・・(;;)
「契約」のところはうまく絞り込んでくれるのですが、「A」のボックスのみに入力して絞り込みをしたら
真っ白になってしまいました~・・・。「B」も「C」も同じく絞り込めません。
「契約」に入れて、「A」(またはB/C)に入れて、ふたつ絞り込み条件を入れると「契約」の中の「A」が表示されるはずなのに、「契約」のみが絞り込まれます。

テキストボックスの名前とか関係あるんですか?
(初心者なもので、基本的な質問ですみません)
いろいろ書き直したので、前回「回答!」に書いて下さってたのをそのままコピーして貼り付けました。

Private Sub コマンド50_Click()

Dim sFilter As String

sFilter = "契約='" & Me!テキスト51 & "'"

'テキストボックスA
If IsNull(Me.A) = True Then
sFilter = sFilter & " and A='" & Me.A & "'"
End IF

'テキストボックスB
If IsNull(Me.B) = True Then
sFilter = sFilter & " and B='" & Me.B & "'"
End IF

'テキストボックスC
If IsNull(Me.C) = True Then
sFilter = sFilter & " and C='" & Me.C & "'"
End IF


Me.Filter = sFilter
Me.FilterOn = True

End Sub

それぞれのテキストボックスのプロパティの名前のところには
A テキスト57
B テキスト65
C テキスト67
D テキスト69

となっています。
またぜひよろしくお願いします。
ほんとにすみません~・・・。

補足日時:2004/07/14 05:29
    • good
    • 0

単純に、入力がなければ、条件に加えないようにしたらどうでしょうか?



Me.Filterに設定する内容を予め作っておきます。




Private Sub コマンド50_Click()

Dim sFilter As String

sFilter = "契約='" & Me!テキスト51 & "'"

'テキストボックスA
If IsNull(Me.A) = True Then
sFilter = sFilter & " and A='" & Me.A & "'"
End IF

'テキストボックスB
If IsNull(Me.B) = True Then
sFilter = sFilter & " and B='" & Me.B & "'"
End IF

'テキストボックスC
If IsNull(Me.C) = True Then
sFilter = sFilter & " and C='" & Me.C & "'"
End IF


Me.Filter = sFilter
Me.FilterOn = True


End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!!
うまくいきました!!
それと・・・もうひとつ質問なんですが・・・。
日付○日~○日、も選びたいんですが、同じようにすれば良いのでしょうか?
よろしくお願いします。

お礼日時:2004/07/13 07:10

私の場合もクエリですけれど、ringo0120さんのおっしゃる「テキスト51」の前後にワイルドカード「"*"」をつけて&で繋げています。

あとNull記述もしてますね。
こんなカンジです。
Like "*" & [forms]![フォーム名]![テキスト名] & "*" Or Is Null
これを各抽出条件に入れています。
検索条件が多い場合にクエリの抽出条件の列が1列で済むので重宝してます。書くのめんどくさいですけどね。
    • good
    • 0
この回答へのお礼

ありがとうございます!
ワイルドカード、私も最初やったのですが、どうもうまくいきませんでした。
H-blackさんの言うように書いてみるとできました!
なので、もうひとつの巨大検索フォームに使わせてもらいました~!!(^-^)
ありがとうございました!

お礼日時:2004/07/13 07:12

クエリでうまくできます。


フォームにテキストボックス入力窓を3つ開け
クエリの抽出条件の欄にそのフォームの入力窓を入力して行きます。一行目は A と BとCを同じ行に 2行目はAとB 3行目はAとC 4行目は BとC 5行目はA 6行目はB 7行目はCと7行に分ければいいでしょう。アンド ではなくて オア で検索されるので 入力のない欄があってもだいじょうぶです 
    • good
    • 0
この回答へのお礼

ありがとうございますーー!!
この方法、簡単だし、うまくできました!!
なので、これも検索フォームに使わせてもらいます!!
ほんとにありがとうございました!!

お礼日時:2004/07/13 07:15

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