• 締切済み

レコード一件ずつ処理判定をしたいのです。

データベースの値を取得してきて 下記内容の処理を実施したいと考えています。 Do While rs.EOF = False    処理する内容:     レコード1件目とレコード2件目の値をチェックする。     レコード2件目とレコード3件目の値をチェックする。 rs.MoveNext Loop レコード一件ずつ処理の判定をしたいのです。 要は レコード内で重複する値があれば排除する分岐をしたいんですよね。

みんなの回答

  • onos
  • ベストアンサー率81% (127/155)
回答No.2

SQL 文には DISTINCT という重複を排除してデータを取得する命令がありますが。 それが使えないようなら、一度データ全部をなんらかの形で受け取ってしまって、データベースとの接続はきったうえでデータの比較処理をすべきでしょう。 データベースとの接続はできるだけ短くしておくべきだと思います。

  • STICKY2006
  • ベストアンサー率29% (1536/5269)
回答No.1

>>データベースの値を取得してきて SQL文組んでいい。って話なら、group byでいいのでは? 値をまとめて、件数数えて、2件以上のものをSQLで抽出させて、ヒットするようなら、 逆に「値」から、レコードIDみたいなもの引っ張ってくればいいわけですし。 >>レコード1件目とレコード2件目の値をチェックする。 >>レコード2件目とレコード3件目の値をチェックする。 >>レコード内で重複する値があれば どうしてもソレがいい。 って話なら レコード100件あった場合 1件目と2~100件目。 2件目と、3~100件目。 3件目と、4~100件目。 4件目と、5~100件目。 ・ ・ ・ 99件目と、100件目。 となるようなループ処理つくる事になりますかねぇ。 レコードが10万件、100万件。。。とかになったら、えらいループ時間かかりますがね。

関連するQ&A

  • 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,,,]の数字の部分を指定することが出来ずにいます。 変数など駆使すれば出来ると思うのですが良くわかりません。 どなたか教えてください。

  • AccessVBA レコードの更新

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします さっそくで失礼かとは思いますが、 lngIdx = 1 Do While rs.EOF = False sql = "update 設備管理2_3改テーブル set " & vbCrLf sql = sql + " ID = '" & lngIdx & "'" & vbCrLf lngIdx = lngIdx + 1 rs.MoveNext Loop これでテーブルに格納されている「ID」という箇所をレコード単位で一つずつ変更していくのは無理なのでしょうか? やってみて無理だったんですけども。 どう記述したら、レコードを一つずつ更新出来るのでしょうか?

  • 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 ------------------------------------ よろしくお願いします。

  • LOOP処理で処理の先頭に移動するには?

    数年ぶりにVBのプログラミングをする事になり超初心者状態のため稚拙な質問で申し訳ございません 以下のような感じでLOOP処理を作成しています。 DO UNTIL AAA.EOF チェックA チェックB チェックC  AAA.MOVENEXT LOOP 上記のような形で取得した内容をLOOPでまわし、 一レコードづつチェックをかけていくのですが、 たとえば、チェックBでエラーとなった段階で AAA.movenextして チェックcはスキップしLOOPの先頭に移動し 次レコードのチェックをチェックAから開始したいのですが、 このような場合どう記述するのでしょうか? EXIT DOでループ自体から抜けるやり方はありましたが、このように処理の 途中で以降の処理をスキップしてループの先頭に移動する 方法が見つかりませんでした。 どなたかご教授ください!!

  • (ADO)selectで取得できたレコードの総数

    SQL文にcount()を書かずにクエリを実行して、何レコードが得られたかを Do While Not rs.EOF  i = i + 1  rs.MoveNext Loop 以外の方法で知ることはできませんか? rsは場合によっては逆方向にrs.MovePrevみたいにできるらしいですが、今の環境では順方向しか対応していません。 環境はIIS、access、ADO、MDBです。

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

    簡単なことだと思うのですが、解決できなくこまっております。お助けください。 以下のコーディングで、データの取得は出来ているのですが、「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」で発生するエラーの回避方法を御教示願います。

  • カレント行取得

    Do While Not rs.EOF  If Text1(0).Text <> rs.Fields(1) Then   /*--*--*/   rs.MoveNext     Else   msg = "コードが重複しています."   MsgBox msg, vbOKOnly, "重複チェック"   Text1(0).Text = ""   Text1(0).SetFocus  End If Loop *------ text1(1) = rs.fields(1) text1(2) = rs.fields(2) -------* データベース(Access)にデータが3件入っていて、例えば、1件目のデータを更新したいのですが今のソースでは、/*--*--*/でデータベースを次々読んでいるので、3件読み終えたときにカレント行が4件目にあると思うので、それを”任意”の行にしたいのですが教えてください。

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

    教えてください。 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 %> **************************

  • 重複チェック

    いま、重複チェックをしているのですが、MoveFirstで データをある分だけ調べていて、データが重複してなかったら、データを更新したいのですが、はじめにMoveFirst で、データを調べたので、カレント行が最終行にあると思うので、それを例えば、3行目のデータだったり、5行目のデータを変更したいのですが、よろしくお願いします。 重複チェック rs.MoveFirst   Do While Not rs.EOF    If Text2(0).Text <> rs.Fields(1) Then rs.MoveNext End If Loop rs.Fields(1) = Text2(0).Text

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

    お世話になっております。 単純なことで悩んでおります、どなたかわかるかたお願いいたします。 <% 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回目のループ処理がうまく抽出できません。 原因はわかりますでしょうか?