Access2007のVBでレコードをスキップする方法について教えてください

このQ&Aのポイント
  • Access2007のVBを使用してテーブルをオープンし、RecordSetとして読み込む際に、特定の条件を満たすレコードをスキップする方法について教えてください。
  • 具体的には、廃油計がゼロの場合、そのレコードをスキップしたいです。しかし、現在のコーディングでは正しく機能していません。
  • 正確にレコードをスキップするための適切なコーディング方法について教えてください。
回答を見る
  • ベストアンサー

Do Until rs1.EOF であるレコードをスキップしたい

ACCESS2007のVBについて教えて下さい。 テーブルをオープンし RecordSetとして、rs1、に読み込まれてきます。 あるフィールド、廃油計がゼロのときは、そのレコードに対し  処理をスキップしたいのです。 苦しまぎれに、下記のように   Continue、を使うとContinueが関数とみなされてしまいます。 ある、レコードをスキップさせたいとき、   そのようにCoding、したらいいのでしょうか? --------------------------------------- Do Until rs1.EOF If rs1![廃油計] = 0 Then continue End If ' '処理 ' rs1.MoveNext Loop ------------------------------------ よろしくお願いします。

  • maaaa
  • お礼率91% (330/362)

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

AccessのVBAにはContinueステートメントが存在しません Do ... Loop構文の制御は Exit Doでループを抜けるといったものしかありません したがって 特定の条件以外の処理を記述する場合 If then else end ifの構文で制御しましょう Do Until rs1.EOF   If rs1![廃油計] <> 0 Then     '     '処理     '   End If   rs1.MoveNext Loop といった具合です ・・・

maaaa
質問者

お礼

回答ありがとうございました。 If rs1![廃油計] <> 0 Then で解決しました。

関連するQ&A

  • Do Untilで途中で抜け出る方法は

    Do Until rs.EOF myCtr = myCtr + 1 If myCtr > 5 Then brake End If Debug.Print rs!品番, rs!品名 rs.MoveNext Loop こんな感じでできませんか 実行してみると brakeのところでエラーになります ACCESSの中のVbでADOを使っています

  • レコードセットのループ処理でエラー・・・

    簡単なことだと思うのですが、解決できなくこまっております。お助けください。 以下のコーディングで、データの取得は出来ているのですが、「Do Until rs1.EOF」でエラーとなります。 SOURCE----------------------------------------- sql = "Select No from t01" Recordset.Open sql, dbc, 3 If rs1.EOF Then Response.Write "データナシ<BR>" ←表示されません。 else Do Until rs1.EOF ←この行でエラーとなります。 Response.Write "No=" & rs1("No").Value rs1.MoveNext Loop end if Error-------------------------------------------- ADODB.Field (0x80020009) BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 因みに、Do Untilを使用せず  Response.Write "No=" & rs1("No").Value  rs1.MoveNext  Response.Write "No=" & rs1("No").Value と記述すると正常にデータが表示されます。 「Do Until rs1.EOF」で発生するエラーの回避方法を御教示願います。

  • VB6.0DataGridでのUpdate文で疑問?

    ADOの勉強したばっかりで、あまり詳しくありませんのでよろしくお願いします。 DataGridを使ってある条件で抽出しています。その抽出したものを更新したいのですが、 Do rs!分類ID = text1 rs.Update rs.MoveNext Loop Until rs.EOF という命令を書くと、いいような気がするのですが、なぜか抽出したデータが一個おきに書き換わります。 でも、 Do rs!分類ID = text1 rs.Update rs.MoveNext  if rs.EOF then rs.Previous END IF Loop Until rs.EOF と命令するとすべてのデータが書き換わります。 なぜなんでしょうか?疑問です。 VB6.0、ACCESS2000です。

  • access vbでループ処理

    レコードセットでテーブルの内容をフォームのテキストボックスに表示 させたいのですが、vbの知識が無く困ってます。以下の処理をループ処理で 簡単に出来ないでしょうか。 ' PASU1 = rs!PASU ' rs.MoveNext ' PASU2 = rs!PASU ' rs.MoveNext ' PASU3 = rs!PASU ' rs.MoveNext ' PASU4 = rs!PASU ' rs.MoveNext ' PASU5 = rs!PASU ' rs.MoveNext ' PASU6 = rs!PASU レコードセットは, Do Until rs.EOF   loop を用いれば繰り返し出来ると解っているのですがフォームの, PASU[1,2,3,,,]の数字の部分を指定することが出来ずにいます。 変数など駆使すれば出来ると思うのですが良くわかりません。 どなたか教えてください。

  • テーブルのレコードが0件時にmsg表示(アクセス)

    とてつもない初歩的な質問で すみません! フォーム1をメニュー画面として、 フォーム1にある「ボタン」を押すと テーブルにレコードが追加され、処理が走る・・・という仕様を作っています。 ですが、 このテーブルにレコードが追加されなかった=0件 の場合の回避策を どうしたら良いのかが わかりません。 ちなみに、 Private Sub ボタン_Click() On Error GoTo errmsg DoCmd.SetWarnings False Dim DB As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim i As Long Set DB = CurrentDb Set rs1 = DB.OpenRecordset("テーブル1") Set rs2 = DB.OpenRecordset("テーブル2", dbOpenDynaset) rs1.MoveFirst Do Until rs1.EOF If rs1!フィールドA1 = rs1!フィールドA2 Then rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = rs1!フィールドA1 rs2!B = rs1!フィールドB rs2!C = rs1!フィールドC rs2.Update End If If rs1!フィールドA1 < rs1!フィールドA2 Then For i = rs1!フィールドA1 To rs1!フィールドA2 Step 1 rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = i rs2!フィールドB = rs1!フィールドB rs2!フィールドC = rs1!フィールドC rs2.Update Next i End If rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing DB.Close: Set DB = Nothing Call 次処理 errmsg: MsgBox "元データが未投入です。" End Sub としたのですが、 これでは データが投入され、処理が成功=完了した場合にも エラーメッセージが出てしまいました。 ご教示いただけますと幸いです。 お手数をおかけしますが、よろしくお願い致します。

  • ループ処理の繰り返しについて

    お世話になっております。 単純なことで悩んでおります、どなたかわかるかたお願いいたします。 <% DO UNTIL SQLrs.EOF IF a=0 THEN %> 処理1 <% END IF SQLrs.MOVENEXT LOOP %> <% SQLrs.MOVEFIRST DO UNTIL SQLrs.EOF IF b=0 THEN %> 処理2 <% END IF SQLrs.MOVENEXT LOOP %> 上記のような処理順なのですが、問題は MoveFirstで先頭のレコードにもどらないのか、2回目のループ処理がうまく抽出できません。 原因はわかりますでしょうか?

  • レコードを上から順に読み込みたい

    SQLを初めたばかりです。ACCESS2010を使っています。 テーブルを上から順番に読み込んで、とあるフィールドの数値に 1を足してから該当レコードを更新する単純なことがしたいのですが 上手く行きません。 現在は次のようになっています。 rs.Open "uriage", cn, , adLockOptimistic Do Until rs.EOF sql = "" sql = "UPDATE uriage SET 売上額 = 売上額 + 1" cn.Execute sql rs.MoveNext Loop これを実行すると、売上額フィールドに入っている数値に レコードの件数分の数値が足された結果となります。 例えばレコード件数が10で、売上額が1なら11、となります。 多分初歩的な事が理解できていないのだと思いますが 何故なのかがわかりません。

  • レコードが存在しなかった場合

    教えてください。 Vbscript初心者です。 SQLでデータを取得した後の構文で以下のような記述があります。 もしレコードが存在しなかった場合に Response.write(”レコードが存在しません")と表示したいです。 IIf Rs.RecordCount=0 Then Response.write("レコードが存在しません") End If のような書き方をどこかに入れようとしているのですが、以下のようなメッセージが表示されてしまいます。どのように書けば宜しいでしょうか? ADODB.Field エラー '800a0bcd' BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 よろしくお願い致します。 **************************** SQL文や接続の記述 <% Do While not Rs.EOF = True  Response.Write・・・   Rs.MoveNext Loop Rs.Close Set Rs = Nothing Con.Close Set Con = Nothing %> **************************

  • ACCESS ADOのMovePreviousについて

    毎度お世話になっております。 ACCESS2003を使用しています。 ACCESS ADOにて、レコードセットがeofになった後、 MovePreviousをし、MoveNextをし、 さらにもう一度MovePreviousをすると、 最終レコードの一つ前に戻ってしまいます。 テーブル1 フィールド1 フィールド2    1     あ    2     い    3     う    4     え    5     お コード Sub test()   Dim cn As New ADODB.Connection   Dim rs As New ADODB.Recordset   Set cn = CurrentProject.Connection   rs.Open "select * from テーブル1 order by フィールド1", cn, adOpenDynamic, adLockReadOnly   Do Until rs.EOF    rs.MoveNext   Loop   rs.MovePrevious   Debug.Print rs.Fields("フィールド1").Value   rs.MoveNext   rs.MovePrevious   Debug.Print rs.Fields("フィールド1").Value   rs.Close: Set rs = Nothing   cn.Close: Set cn = Nothing End Sub 一度目のdebug.printは5に、 二度目のdebug.printは4になります。 このような仕組みなのでしょうか。 ご教授お願いいたします。

  • フォーム上のテキストボックスにテーブル値を改行代入

    Access2013を使用しています。 フォーム上のテキストボックスにテーブルAの項目Bを複数レコード分を改行しながら 代入したいのです。 Set CN = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブルA", CN, adOpenStatic, adLockOptimistic Do Until rs.EOF   If rs!項目B <> "" Then    Me!テキストボックス = rs!項目B & vbLf   End If   rs.MoveNext Loop 上記ですと、当たり前ですが最終レコードの項目Bのみがセットされます。 検索ワードがよくないのか、同様の問合せを見つけることができません。 よろしくお願いします。