Access2007のVBでレコードをスキップする方法について教えてください
- 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)
- Visual Basic
- 回答数1
- ありがとう数4
- みんなの回答 (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 といった具合です ・・・
関連する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を使っています
- ベストアンサー
- Visual Basic
- レコードセットのループ処理でエラー・・・
簡単なことだと思うのですが、解決できなくこまっております。お助けください。 以下のコーディングで、データの取得は出来ているのですが、「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」で発生するエラーの回避方法を御教示願います。
- 締切済み
- Microsoft ASP
- 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回目のループ処理がうまく抽出できません。 原因はわかりますでしょうか?
- ベストアンサー
- Microsoft ASP
- レコードを上から順に読み込みたい
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 %> **************************
- ベストアンサー
- Microsoft ASP
- 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のみがセットされます。 検索ワードがよくないのか、同様の問合せを見つけることができません。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
お礼
回答ありがとうございました。 If rs1![廃油計] <> 0 Then で解決しました。