Page 117 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼複数条件の検索のかけかたについて まさ 02/11/20(水) 18:10 ┗訂正 まさ 02/11/21(木) 15:45 ┗betweenの辺を確認してください。 こうちゃん 02/11/22(金) 9:12 ┗Re:betweenの辺を確認してください。 まさ 02/11/22(金) 9:43 ┗再現できませんので、もう少し条件をおしえてください。 こうちゃん 02/11/22(金) 16:13 ┗Re:再現できませんので、もう少し条件をおしえてください。 まさ 02/11/22(金) 18:40 ┗こんどはいけるかも こうちゃん 02/11/22(金) 19:23 ┗できました!(TーT) まさ 02/11/25(月) 11:29 ─────────────────────────────────────── ■題名 : 複数条件の検索のかけかたについて ■名前 : まさ <m-amemiya@globalstaff.co.jp> ■日付 : 02/11/20(水) 18:10 -------------------------------------------------------------------------
みなさまこんばんは。 またまた質問させてください。 Private Sub 検索btn_Click() Dim key(1 To 4) As String Dim criteria As String Dim crlen As Integer Dim i As Integer '整理番号 If IsNull(Me!整理番号) Then key(1) = "" Else key(1) = "整理番号 = '" & Me!整理番号 & "'" End If '名前 If IsNull(Me!名前) Then key(2) = "" Else key(2) = "フリガナ = '" & Me!名前 & "'" End If '電話番号 If IsNull(Me!電話番号) Then key(3) = "" Else key(3) = "電話番号 '" & Me!電話番号 & "'" End If '年齢 If IsNull(Me!年齢検索1) Or IsNull(Me!年齢検索2) Then key(4) = "" Else key(4) = "年齢 between #" & Me!年齢検索1 & "# " _ & "and #" & Me!年齢検索2 & "#" End If '抽出条件 For i = 1 To 4 If key(i) = "" Then '""の場合何も処理をしない Else criteria = criteria & key(i) & " AND " End If Next i '条件が1つも設定のないとき If criteria = "" Then Beep MsgBox "1つ以上の条件を指定してください!", vbExclamation, "検索" Me!整理番号.SetFocus Exit Sub End If '文字列作成 crlen = Len(criteria) criteria = Left(criteria, crlen - 5) 'フィルタ実行 Me!F_main_sub.Form.Filter = criteria Me!F_main_sub.Form.FilterOn = True End Sub このように作ってみたのですが、 Me!F_main_sub.Form.Filter = criteria Me!F_main_sub.Form.FilterOn = True ここのところで引っかかってしまいます。 エラーメッセージは 「指定した式で参照されている'F_main_sub'フィールドが見つかりません」 です。 検索用のフォームに、サブフォーム(F_main_sub)を埋め込んでいます。 なにがいけないのかさっぱり解りません。 どうぞよろしくお願い致します。 WinNT/Access2000です。 |
すみません。 > 'フィルタ実行 > Me!F_main_sub.Form.Filter = criteria > Me!F_main_sub.Form.FilterOn = True 「F_main_sub」フォーム名が間違えていました。 正しくは「F_kensaku_sub2」でした。 申し訳ございませんでした。 しかし、直して動かしてみたのですがやはりだめみたいです。(T-T) 同じところで引っかかってしまいます。 エラー内容は 「実行時エラー'2001' 直前の操作はキャンセルされました。」 です。 よろしくお願い致します。 |
まささん、こんにちは >しかし、直して動かしてみたのですがやはりだめみたいです。(T-T) >同じところで引っかかってしまいます。 >エラー内容は >「実行時エラー'2001' 直前の操作はキャンセルされました。」 >です。 >よろしくお願い致します。 > If IsNull(Me!年齢検索1) Or IsNull(Me!年齢検索2) Then > key(4) = "" > Else > key(4) = "年齢 between #" & Me!年齢検索1 & "# " _ > & "and #" & Me!年齢検索2 & "#" > End If 「年齢」は日付じゃないですよね? "#" で囲う書式は日付の時に使います。上記の記述では、たとえば "#20# AND #40#"のようになりますから、そこでエラーになっているんじゃないでしょか? 数値をbetweenで指定するときは"#"なしで以下のように指定してみてください。 key(4) = "年齢 between " & Me!年齢検索1 & " " _ & "and " & Me!年齢検索2 & "" |
こうちゃんさん ありがとうございます。 >「年齢」は日付じゃないですよね? >"#" で囲う書式は日付の時に使います。上記の記述では、たとえば "#20# AND #40#"のようになりますから、そこでエラーになっているんじゃないでしょか? > >数値をbetweenで指定するときは"#"なしで以下のように指定してみてください。 > > key(4) = "年齢 between " & Me!年齢検索1 & " " _ > & "and " & Me!年齢検索2 & "" 直してやってみましたがやはり同じところがNGになってしまいます。 検索条件指定の文がおかしいのでしょうか。 それともフィルタをかける Me!F_kensaku_sub2.Form.Filter = criteria Me!F_kensaku_sub2.Form.FilterOn = True ここの文がおかしいのでしょうか。 今回本を見ながら作ってみたのですが 複数条件検索をかけフォームに表示させる他のやり方はありますでしょうか。 |
まささん、こんにちは >直してやってみましたがやはり同じところがNGになってしまいます。 >検索条件指定の文がおかしいのでしょうか。 >それともフィルタをかける >Me!F_kensaku_sub2.Form.Filter = criteria >Me!F_kensaku_sub2.Form.FilterOn = True >ここの文がおかしいのでしょうか。 > >今回本を見ながら作ってみたのですが >複数条件検索をかけフォームに表示させる他のやり方はありますでしょうか。 試験用に作ったテーブルで同じコードでOKでした。 フィルタをかける直前にブレークポイントを設定して、criteriaの値を確認してみてください。 できればそれをここにUPしてください。 また、テーブルのフィールド型等の条件も教えていただけますか? #ほかの方法もあります。 たとえばSQL文を組み立てて、RecordSourceを設定するとか・・ |
こうちゃんさんこんにちは。 > >試験用に作ったテーブルで同じコードでOKでした。 > >フィルタをかける直前にブレークポイントを設定して、criteriaの値を確認してみてください。 >できればそれをここにUPしてください。 >また、テーブルのフィールド型等の条件も教えていただけますか? > >#ほかの方法もあります。 >たとえばSQL文を組み立てて、RecordSourceを設定するとか・・ そうですか、こうちゃんさんはOKだったんですね。 う〜ん、何がいけないんでしょう。 私が設定している条件なんですが、 T_main のデータ 整理番号 ・ 数値型 名前 ・ テキスト型 電話番号 ・ テキスト型 年齢 ・ テキスト型 クエリの作成 T_main から上記のフィールド選択(並べ替え等いっさい無し) Q_itiran 上記のクエリを元に F_kensaku_sub というフォームを作成 レコードソースは Q_itiran それ以外はすべて規定値 検索用のフォームとして F_kensaku を作成し、レコードソースに T_main(元となるメインテーブルです) を指定他は規定値 検索用条件入力用のテキストボックスをフォームのヘッダー部に 整理番号、名前、電話番号、年齢検索1、年齢検索2を作成 (それぞれT_mainの、整理番号、フリガナ、電話番号、年齢、年齢フィールドに対応) F_kensaku の詳細の所に F_kensaku_sub2 というサブフォームを埋め込んでいます。 ソースオブジェクト F_kensaku_sub フォームのプロパティ レコードソース Q_itiranです。 わかりにくくてすみません。 こんな感じです。 お時間があるときで構いません。 よろしくお願いします。 |
まさ さん、こんにちは >整理番号 ・ 数値型 >年齢 ・ テキスト型 整理番号は数値型で、年齢はテキスト型なんですね。 数値型の場合、コーテーションは不要です。 テキスト型の場合はコーテーションが必要です。 下記を変更して試してみてください。 key(1) = "整理番号 = " & Me!整理番号 & "" key(4) = "年齢 between '" & Me!年齢検索1 & "' " _ & "and '" & Me!年齢検索2 & "' " #まささんの条件で試験用テーブル作り直して試験してみました(^^) 質問するときに、条件はなるべく詳しく書いていただくと、回答も見つけやすいので、こんど質問するときは、最初からなるべく詳しく書いてくださいね。 面倒なようでも、それが早道ですよ。(^^) |
こうちゃんさま ばっちり検索かかります。感動です! ありがとうございました。 >数値型の場合、コーテーションは不要です。 >テキスト型の場合はコーテーションが必要です。 そうなんですか。コーテーションの使い方が分かっていませんでした。 勉強になりました。 >質問するときに、条件はなるべく詳しく書いていただくと、回答も見つけやすいので、こんど質問するときは、最初からなるべく詳しく書いてくださいね。 >面倒なようでも、それが早道ですよ。(^^) m(_ _)m そうですよね。質問の仕方が悪かったです。反省しています。 貴重なお時間をいただきましてありがとうございました。 また分からないことが出てきたら質問させてください。 よろしくお願いします。 |