- 締切済み
重複チェック
いま、重複チェックをしているのですが、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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yanmaa
- ベストアンサー率45% (207/457)
ADOはデータベースにアクセスする手段です。 Accessはデータベースです。 因みに開発はVB6.0ですか? GERRARDさん>このままでは、例えばデータベースに それを言うなら「単位テーブルには」です。 ですから慌てず冷静に補足して下さい。 フォーム上にコードと名称を持っていてそれが15行分あるというのは理解出来ました。 データベースでデータの格納位置については保証される物では御座いません。 単にAccessのフォームでマスタ更新系画面をお作りになりたいならレコードソースに「単位」テーブルを指定すればいいだけですし、VBからADO経由で行いたいのであればdatagridで対応しても良いでしょう。 急いでいるならここで「datagrid」と検索するだけでも十分勉強になります。 rs.Fields(1)からでなく0からのはずですが 画面上でコードを2000から1500に変更したらテーブルのコード2000を1500に変更したいという事ですか?ならば全くもって考え方に問題があります。 2000は何処から拾うのですか? 全行1500でチェックして、重複が無ければ追加だと思いますがなぜ更新なのですか? ループを抜けた後という事はrsはEOFになっているという事はrs.Fields(1)なんて「インデックスが有効範囲にありません」てエラーかな GERRARDさんのソースを見て疑問に思う所は?にしております strSQL = "SELECT * From 単位 " ?レコードセットの記述は? If Flg(1) = 1 Then ?なにもしないのね? Else 'データがある場合 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 Else msg = "コードが重複しています." MsgBox msg, vbOKOnly, "重複チェック" Textx(0).Text = "" Textx(0).SetFocus End If Loop ?なぜループを抜けた時の処理なの? ?ループが抜けた時とはEOFになっているのですよ rs.Fields(1) = Textx(0).Text rs.Fields(2) = Textx(1).Text 'データの更新 rs.Update End If ?何処へ移動するつもりのかな?既に最後の行なのに次があるの? rs.MoveNext End If ?対応するIf文がないよ End If
- yanmaa
- ベストアンサー率45% (207/457)
ご質問が判断出来ません。何がやりたいの? MoveFirstすれば先頭行に位置付けられています。 データベースとのやり取りをしたいのはどうにか理解出来ますが、何と判断して重複チェックをしたいの? 重複が無ければなにに対して更新をしたいの? どのような更新をお望みですか? レコードセットでSELECT文実行しているいるはずだけど場合によってはWHERE句でノットイコール条件(<>や!=)で抽出するだけでもいい。 データベースとのやり取りはADO、DAOそれともそれ以外ですか? とにかく情報が少なすぎて回答するにはちょっと無理があります。 冷静に補足お願いします。 DBMSはなんですか?Access?ORACLE、SQLServer、MySQL・・・
補足
プログラム載せます。 データベースはADOです。ACEESSに書いてます。 /*注意*/ 下記のようなプログラムが15個あります。 Textx(0)となっていますが”x”は1~15まである だから、1行、1行データがあるかないかを判断している。 Textx(0)はコード Textx(1)は名前 /-------------------/ このままでは、例えばデータベースに コード 名前 1000 あいうえお 2000 あいうえお 3000 あいうえお 4000 あいうえお と入っていて、2000を1500に変えて、登録すると、/###/ の下でエラーがでで、更新できなくなるんです。 /-------------------/ strSQL = "SELECT * From 単位 " If Flg(1) = 1 Then Else 'データがある場合 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 Else msg = "コードが重複しています." MsgBox msg, vbOKOnly, "重複チェック" Textx(0).Text = "" Textx(0).SetFocus End If Loop /#######/ rs.Fields(1) = Textx(0).Text rs.Fields(2) = Textx(1).Text 'データの更新 rs.Update End If rs.MoveNext End If End If