ADOでNULLのレコードを抽出する方法

このQ&Aのポイント
  • ADOを使用して登録数フィールドがNULLのレコードを抽出する方法について教えてください。
  • RS.FilterやIsNull関数を使用して登録数フィールドがNULLのレコードを抽出しようとしていますが、エラーが発生しています。対策を教えてください。
  • NULLのレコードを抽出するために、RS.FilterやIsNull関数を使用していますが、うまくいっていません。どのように対策すればよいでしょうか?
回答を見る
  • ベストアンサー

ADOでNULLのレコードを抽出したい

ADOでNULLのレコードを抽出したいのですがうまくできません。 Q全てクエリには、登録日フィールドや登録数フィールドがあります。 登録数フィールドは数値です。 その登録数フィールドがnullのレコードを抽出したいです。 RS.CursorLocation = adUseClient RS.Open "Q全て", cn, adOpenKeyset, adLockOptimistic RS.Sort = "登録日 DESC" RS.Filter = "[登録数] = NULL" RS.Filter = "IsNull(登録数) = True" RS.Filter = "登録数 Is Null" ↑これどれをやってもエラーになります。 対策をお願いします。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

全文を載せてほしいですが、 バタフライ効果というか風が吹けば桶屋が儲かるというか・・ Connection が問題かも。 Set Cn = currentproject.connection で RS.Filter = "[登録数] = NULL" で出来ました。 >RS.Filter = "登録数 Is Null" はDAOの場合ならOK >RS.Filter = "IsNull(登録数) = True" はようわからん なお、 CursorLocation にadUseClient を指定した時点で RS.Open "Q全て", cn, adOpenKeyset, adLockOptimistic としていてもCursorType は、adOpenKeyset→adOpenStaticに固定ですね。 イミディエイトウィンドウで、Rs.cursortype で確認してみてください。 蛇足ですが RS.Open "Q全て", cn と省略した場合は、adOpenStatic、adLockReadOnly になりました。

ssuyhdhk
質問者

お礼

ご回答ありがとうございます。

その他の回答 (1)

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

どこでどのようなエラーが表示されるのかを 示さないとエラー探しを延々としなくてはいけなくなります。 >RS.Open "Q全て", cn, adOpenKeyset, adLockOptimistic を RS.Open "Q全て", cn, adOpenForwardOnly, adLockOptimistic 普通は、 RS.Open "Q全て", cn, adOpenForwardOnly, adLockReadOnly としますが。 それと、 RS.Filter = "[登録数] = NULL" でいいのでは、と思います。

ssuyhdhk
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

  • WHERE レコードが抽出されない

    ADOでSQL文を作ってるのですが WHERE句がうまくできません。 rs.Open "T_テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "URL like '#*'" なら、うまくいくのですが、 Filterを使うのをやめて、WHEREに書きかえると、エラーにはならないのですが 取得レコードが0件になります。 rs.Open "T_テーブル WHERE [URL] like '#*';", cn, adOpenKeyset, adLockOptimistic も rs.Open "T_テーブル WHERE URL like '#*';", cn, adOpenKeyset, adLockOptimistic も、0件が返ります。 何がおかしいのでしょうか? URLフィールドで、#で始まるレコードを抽出したいです。

  • アクセス ADO Null以外のレコードの件数を取得したい

    アクセス ADO Null以外のレコードの件数を取得したい テーブルにレコードが100行あり、そのうちNull値は40行あります。(主キーではないです) この時、ADOでNull以外にフィルタをかけたいのですが For i = 1 To RS.RecordCount RS.Filter = "フィールド = '*'" でも RS.Filter = "フィールド = 'Null''" でも、文字列になってしまい、うまくいきません。 RS.Filter = "フィールド " <> 'Null' だとエラーになります。 「<>null」を抽出する方法をご教授願います。

  • アクセスのADO

    アクセスのADOで ウォッチ式にrsを登録してみていると rs.CursorLocation = adUseClient rs.Open "テーブル1", cn, adOpenStatic, adLockOptimistic を通過後は、 RecordCountには、20と数字が入るのですが、 rs.CursorLocation = adUseClient rs.Open "テーブル2", cn, adOpenStatic, adLockOptimistic にすると RecordCount : <データ プロバイダーまたはほかのサービスが E_FAIL 状態を返しました。> となってしまいます。 テーブルの中身が原因だと思うのですが どういう条件なら、 <データ プロバイダーまたはほかのサービスが E_FAIL 状態を返しました。> になるのでしょうか? rs.CursorLocation = adUseClient を使う理由は、 rs.Sort = "日付 DESC" とソートする為です。 参照設定はMicrosoft Activex Data Objects 2.8 Library にしています。 Access2010・32bitです。

  • ADOのFilterで検索文字列を「含む」レコードを検索したい

    エクセル2003を使用しています。 派遣社員名="田中" rs.Open "SELECT * FROM Tメイン", cn, adOpenKeyset, adLockOptimistic rs.Filter = "件名 = " & "'" & "*" & 派遣社員名 & "*" & "'" 数 = rs.RecordCount のように、 件名フィールドに「田中」が含まれているレコードを抽出したいのですが 結果は0件になっていしまいます。 (件名フィールドには、「田中太郎」など「田中」を含む文字はあります。) どうすればいいでしょうか? よろしくお願い致します。

  • ADO 英語を含むレコードを抽出したい

    テーブルに保存されてるフィールド1の英語が含まれているレコード(ABC株式会社 など)を抽出したいのですが 方法がわかりません。 *[a-z]* を使うんだなと思いますが、フィルタのかけかたがわかりません。 Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ファイル名 RS.Open "テーブル1", CN, adOpenStatic, adLockOptimistic RS.Filter = "フィールド1 = " '←ここをどうすればいいでしょうか? RS.Close: Set RS = Nothing CN.Close: Set CN = Nothing End Sub サンプルを作ってみたのですが ご教示頂けないでしょうか? よろしくお願い致します。

  • ADOでアクセスのレコードに複数のフィルタをかけるには?

    Sub ADO() Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = ("フィールド1 = " & "'" & 変数1 & "'") rs.Filter = ("フィールド2 = " & "'" & 変数2 & "'") Debug.Print rs.RecordCount Set rs = Nothing Set cn = Nothing End Sub だと最終的にはフィールド2のフィルタ後の個数しか取得できません。 rs.Filter = ("案件CD = " & "'" & 案件CD & "'" And "プロセス = " & "'" & プロセス & "'") だと「型が一致しません」になります。 どうすれば変数1と変数2のフィルタ後のレコードの個数を取得できるのでしょうか? ご教授よろしくお願い致します。

  • ADOでループすると1レコードずつ飛ばしてしまう

    アクセスなのですが Sub test() Set cn = CurrentProject.Connection rs.Open "テーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "(店名 = '" & str店名 & "') And (URL = '未')" For j = 1 To rs.RecordCount rs("URL") = "http" rs.Update rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub このようにして、既存のレコードにフィルタをかけて該当のレコードの値を更新しているのですが rs.MoveNext をいれると、 1レコード目、3レコード目、5レコード目・・・と言う順番になってしまい、 最終的にrs.RecordCountの数を越したレコードを指定してしまい 実行時エラー 3021 「BOFとEOFのいずれかTRUEになっていか、または現のレコードが要求された操作には、現在のレコードが必要です。」 となってしまいます。 だからって rs.MoveNextをいれないと、rs.RecordCountに達するまで、 いつまでも同じレコードをループしてしまいます。 1レコードずつ順番にデータを掴む方法を教えてください。

  • ADOでNullフィールドの抽出

    VB6.0+ADO2.7で、mdbファイルを扱っています。 .filterプロパティを使ってabcフィールドの値がnullまたは空のテーブルを抽出したく recordset.filter="abc= null or abc=''" としました。この場合は問題ないのですが、更にdefフィールドの条件を追加し recordset.filter="(abc= null or abc='') AND def= 'xyz'" としたところ 「実行時エラー3001 引数が間違った型、許容範囲外、または競合しています。」 というエラーが発生してしまいます。 また、 recordset.filter="abc= null AND def= 'xyz'" 或いは recordset.filter="abc='' AND def= 'xyz'" では問題ありません。 何が悪いのでしょうか? よろしくお願いします。

  • 実行時エラー-2147217904

    rs.CursorLocation = adUseClient rs.Open strSQL, cn, adOpenKeyset, adLockOptimistic の部分で、 実行時エラー-2147217904 「1つ以上の必要なパラメータの値が設定されていません」 となるのですが、どういうことでしょうか? やはりSql文に問題があるのでしょうか?

  • 【ADO】「Filter」を使うか「WHERE」を使うか

    こんばんは。 アクセス2003です。 「Filter」を使うか「WHERE」を使うかべきかわからないので教えてください。 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Sub test1() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル WHERE 'フィールド1'='りんご", cn, adOpenKeyset, adLockOptimistic rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub Sub test2() cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & アクセスファイル名 rs.Open "SELECT * FROM Tテーブル", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'" & "りんご" & "'" rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub 以上のふたつのステートメントは Tテーブルのフィールド1にりんごの文字が入力されているレコート゛を抽出します。 いくつかこのような動作をするプログラムを書くのですが どちらのほうがコート゛として適していますか? WHEREを使うtest1の方がコート゛が短くなるからいいのでしょうか? というのもいつかこのファイルを引き継ぐので他人が見てもわかりやすくしたいです。 よろしくお願い致します。

専門家に質問してみよう