Page 685 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼複数条件での抽出 orange 04/6/29(火) 10:55 ┗Re:複数条件での抽出 しろくろやぎ 04/6/29(火) 14:59 ┗Re:複数条件での抽出 orange 04/6/29(火) 15:05 ┣Re:複数条件での抽出 しろくろやぎ 04/6/30(水) 17:23 ┃ ┗Re:複数条件での抽出 orange 04/7/1(木) 17:57 ┗Re:複数条件での抽出 クロ 04/6/30(水) 17:58 ┗Re:複数条件での抽出 orange 04/7/1(木) 18:02 ┗Re:複数条件での抽出 クロ 04/7/1(木) 18:17 ┗Re:複数条件での抽出 orange 04/7/3(土) 13:53 ┣Re:複数条件での抽出 クロ 04/7/5(月) 11:03 ┗Re:複数条件での抽出 追伸 クロ 04/7/5(月) 11:47 ┗Re:複数条件での抽出 追伸 orange 04/7/5(月) 13:37 ┗Re:複数条件での抽出 追伸 クロ 04/7/5(月) 14:14 ┗Re:複数条件での抽出 追伸 orange 04/7/5(月) 16:56 ┗Re:複数条件での抽出 追伸 クロ 04/7/5(月) 18:01 ┗Re:複数条件での抽出 追伸 orange 04/7/6(火) 10:36 ┗Re:複数条件での抽出 追伸 クロ 04/7/6(火) 10:50 ─────────────────────────────────────── ■題名 : 複数条件での抽出 ■名前 : orange ■日付 : 04/6/29(火) 10:55 -------------------------------------------------------------------------
はじめまして。 IF文での条件によって、データの抽出条件が増減するような場合、 単一の抽出条件では、うまくさどうしているのですが 複数の抽出条件になると実行エラーがでてしまいます。 解決方法のアドバイスお願いします。 実行エラー'-2147217904(80040e10)' 一つ以上の必要なパラメータの値が設定されていません。 strSQL = "SELECT * FROM 業務区分テーブル " If IsNull(Me.業務区分) = False And _ Len(Me.業務区分) <> 0 Then strSQL = strSQL & "where 業務区分='" & Me.業務区分 & "'" End If If Me.業務区分 = "その他" Then If IsNull(Me.施設種別) = False And Len(Me.施設種別) <> 0 Then strSQL = strSQL & " and 施設コード='" & Me.施設種別 & "'" If Me.施設種別 = "31" And _ IsNull(Me.郵便局種別) = False And _ Len(Me.郵便局種別) <> 0 Then strSQL = strSQL & " and 郵便局種別='" & Me.郵便局種別 & "'" ElseIf Me.施設種別 = "30" Or _ Me.施設種別 >= "50" Then If IsNull(Me.口座番号) = False And Len(Me.口座番号) <> 0 Then If "25" <= Me.都道府県コード And "30" >= Me.都道府県コード Then strSQL = strSQL & " and 管理部局='09'" ElseIf Me.都道府県コード = "47" Then strSQL = strSQL & " and 管理部局='13'" End If strSQL = strSQL & " and 口座番号='" & Me.口座番号 & "'" End If End If End If End If strSQL = strSQL & ";" Set wCNN = Application.CurrentProject.Connection Set wRec = New ADODB.Recordset wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly 実行エラーは最後のwRec.Open〜の部分で起こっているようです。 よろしくお願いします。 |
▼orange さんWrote: >解決方法のアドバイスお願いします。 エラーの確認方法として > strSQL = strSQL & ";" ここでブレイクを入れて、strSQLの中身を表示させる事で Debug.Print strSQL 意外と簡単に原因がわかるんじゃないかと思います。 クエリーのデザインでSQLビューにし、表示されたSQLを 貼り付けて確認するとか。 |
SQLの内容も確認したのですが、 SELECT * FROM 業務区分テーブル where 業務区分='その他' and 施設コード='04'; ↑のような内容でした。間違ってますでしょうか? |
▼orange さんWrote: >SELECT * FROM 業務区分テーブル where 業務区分='その他' and 施設コード='04'; > >↑のような内容でした。間違ってますでしょうか? SQLの文法的には問題ないと思います。 (フィールドの属性がわからないので完全ではありませんが) これをクエリーで実行したら、結果は表示されますでしょうか? |
クエリーでは問題なく該当レコードの抽出ができました。 パタメータが足りないって、どういうことなんでしょうね。 他の複数条件の組み合わせも、チェックしてみます。 |
▼orange さん: >SQLの内容も確認したのですが、 > >SELECT * FROM 業務区分テーブル where 業務区分='その他' and 施設コード='04'; > >↑のような内容でした。間違ってますでしょうか? Dim msg As Integerを入れて **省略** Set wCNN = Application.CurrentProject.Connection Set wRec = New ADODB.Recordset wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly msg = MsgBox(wRec.GetString, , wRec.Source) 'これを追加 テキストボックスに条件を入れていき、どの条件でエラーになるか 調べてみては? msgboxに条件毎のレコードが表示されるはずです。 |
▼クロ さん: >Dim msg As Integerを入れて > >**省略** >Set wCNN = Application.CurrentProject.Connection >Set wRec = New ADODB.Recordset >wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly >msg = MsgBox(wRec.GetString, , wRec.Source) 'これを追加 > やってみたのですが、 wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly ここで実行エラーになるため、msgboxは表示されないのです。 該当データは1件しか存在しないので、複数ヒットはしないのです。 抽出条件の組み合わせが変わるごとにソートするようにした方がいいのでしょうか? |
▼orange さん: > wRec.Open strSQL, wCNN, adOpenStatic, adLockReadOnly >ここで実行エラーになるため、msgboxは表示されないのです。 >該当データは1件しか存在しないので、複数ヒットはしないのです。 そりゃそうでした。スミマセン... >抽出条件の組み合わせが変わるごとにソートするようにした方がいいのでしょうか? 検証してみたいので 業務区分テーブル 業務区分:テキスト型 施設コード:テキスト型 郵便局種別:テキスト型 管理部局:テキスト型 口座番号:テキスト型 に仮にどのようなレコードをセットしてフォームの各フィールドに何を入れたときに どのレコードが表示されればいいのか教えていただけますか? |
▼クロ さん: 業務区分テーブルの構成は次のようなものです。 業務区分:テキスト型 施設コード:テキスト型 郵便局種別:テキスト型 管理部局:テキスト型 口座番号:テキスト型 比率1:数値型 比率2:数値型 業務区分が「その他」の場合、今回のエラーになっています。 業務区分="その他"の場合のみ、 施設コード、郵便局種別、管理部局、口座番号との組み合わせによる 抽出条件が発生します。 組み合わせは、 1・業務区分、管理部局、施設コード 2・業務区分、管理部局、施設コード、郵便局種別 3・業務区分、管理部局、施設コード、口座番号 の3パターンです。 抽出条件でヒットしたレコードの比率1、比率2の値をフォームに 持ってきたいのです。 業務区分テーブルはレコードの重複はありません。 よろしくお願いします。 |
出来れば実際の値を教えていただき、この条件時に 表示(SQL化)されない(あるいは希望したレコードが抽出できない)というの を教えていただきたいのですが... |
"25" <= Me.都道府県コード And "30" >= Me.都道府県コード この条件を満たすものってありますか? |
▼クロ さん: >"25" <= Me.都道府県コード And "30" >= Me.都道府県コード >この条件を満たすものってありますか? 都道府県コードが25以上30以下なので存在します。 具体的な例としては フォームに 施設コード=04が入力され、 業務区分=その他をコンボボックスにて選択したときに 業務区分テーブルにある該当レコード 業務区分='その他' 施設コード='04' 郵便局種別=null 管理部局=null 口座番号=null 比率1=0.5 比率2=0.5 この比率がフォームに返されるようにしたいのです。 このとき、郵便局種別や口座番号はフォームに入力されていても されていなくても関係ありません。 施設コードが31の場合は、郵便局種別も抽出条件に加わります。 郵便局種別が30の場合の業務区分テーブルにある該当レコード 業務区分='その他' 施設コード='31' 郵便局種別='30' 管理部局='09' 口座番号=null 比率1=0.5 比率2=0.5 このような感じです。よろしくおねがいします。 |
▼orange さん: 値を入れてみて、レス2988のメッセージを表示させても orangeさんのコードで抽出されるようです。 ここにはサンプルをアップする場所がないので他所BBSですが サンプルをアップしました。 http://www.penhagi.net/cgi-bin/bbs/bbs.cgi ちょっと見てください。 |
▼クロ さん: サンプル拝見させていただきました。 ありがとうございます。 残念ながらサンプルを実行してみたのですが、MSGBOXの表示がされませんでした。 そこでサンプルをコピペなどし、試したのですが 業務区分"その他"以外の場合はMSGBOXも表示され、該当レコードも抽出されています。 これは、今までも正常に動いていた部分です。 問題の複数条件の値を入れて実行してみると、 今までと同じ現象なのです。 http://www.penhagi.net/cgi-bin/bbs/bbs.cgi こちらにRESという形で、私の使っているファイルをアップしました。 今回の質問に無関係の部分は削除しております。 お手数ですが、よろしくお願いします。 |
▼orange さん: >▼クロ さん: ちょっとガチガチに編集ロックされていたりマクロが外されているので 検証できません。 ただ、以下の部分は変更が必要です。 **省略** If Me.業務区分 = "その他" Then If IsNull(Me.施設種別) = False And Len(Me.施設種別) <> 0 Then '施設コードというフィールドは無いので「施設種別」に変更 strSQL = strSQL & " and 施設種別 ='" & Me.施設種別 & "'" If Me.施設種別 = "31" And _ **省略** msgboxはエラーするかもしれないので「'」でコメントアウトしてください。 これでどうですか? >http://www.penhagi.net/cgi-bin/bbs/bbs.cgi >こちらにRESという形で、私の使っているファイルをアップしました。 上記は通常先様のBBS用アップローダなので削除したいのですが、 orangeさんのものを削除してもらわないと私のも削除できません。 orangeさんのものを削除してください。 |
クロさん、長い間ありがとうございました。 やっと正常に動くようになりました。 原因は、最後に指摘いただいた項目名の間違いです。 こんな初歩的なミスのために、お時間を裂いていただき ほんとうにすみませんでした。 そして、ほんとうにありがとうごじました。 今後は思い込みをなくし、もっとチェックしてから 投稿するようにしていきたいと思います。 ほんとうに、ほんとうにありがとうございました。 p.s.ファイルアップ先の方、現在はいることができなかたったので 自宅からアクセスしRESを削除致します。 (夜まで待ってくださいませ。) |
お疲れさまでした。 サンプルmdbの件了解しました。 |