- 締切済み
カレント行取得
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件目にあると思うので、それを”任意”の行にしたいのですが教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- maruru01
- ベストアンサー率51% (1179/2272)
再びmaruru01です。 もし、Accessのそのテーブルのレコードを、 変更や追加はするが、削除はしない ということであれば、そのテーブルに新しく数値のフィールドを作って、一番上のレコードから順に、 1,2,3・・・ という風に連番をつけてはどうでしょう。 そうすれば、Findを使って、そのフィールドの値で検索出来ます。 連番は、15個ぐらいなら手入力出来ますし、もし実はレコードが多いということなら、コードで書いて実行してもいいと思います。 では。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 ちょっとお聞きしたいんですが、 どういう条件で、"5行目"を取り出すのでしょうか。 どこかのフィールドの値がある条件のデータでしょうか。それなら、Findを使えばいいと思います。 それとも、"行数"が問題なんでしょうか。でも、行数は、Accessでテーブルをいじってしまう(ソート)と変わってしまいますけど。 データの内容に関係なく移動するのはMove系(先頭、前、後ろ、末尾)で、任意の条件での移動はFindになります。 補足をお願いします。 では。
補足
そうですね、”行数”が問題になっています。ACCESSのテーブルはいじらないとおもってください。 今問題になっているのが”データ更新”のところなんですが?? /*** ***/ ここで、データがある文だけ最初から探しているので、例えば、データが10件入っていて、1行目のデータを変更するときは、/###/のところにmovefirstをつかえばいいのですが、3件目のデータとかの場合はどうすればいいのですか?? /*注意*/ textxは1~15までが入っていて、だから15個このようなプログラムがあります。 If Textx(0).Text <> rs.Fields(1) Then '重複チェック rs.MoveFirst Do While Not rs.EOF If Textx(0).Text <> rs.Fields(1) Then /*** rs.MoveNext ****/ End If Loop End If /#####/ rs.Fields(1) = Textx(0).Text
- zerosix
- ベストアンサー率31% (47/149)
まずちょっと変更したほうがいい点です。 >If Text1(0).Text <> rs.Fields(1) Then ↑のような条件判定をレコードごとに行うのはよくありません。 今は3件だけかもしれませんが、1000件のデータを対象にすると 時間がとてもかかります。 SQLでwhere句で条件を指定してもっとレコードを絞り込むべきです。 >それを”任意”の行にしたいのですが教えてください。 なぜ任意にしたいのでしょう。 SQLを再発行するとか、MoveFirstを使用してはだめなのですか?
補足
それじゃあ、ちょっと言い方を変えます。ACCESSにデータが10件は入っていて、5行目のデータを取り出したいときにはどうすればいいですか? moveXXXでないですか?
補足
すみませんが、Findの使い方を教えていただけないでしょか?ヘルプ機能がないもので・・・