OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

重複チェック

  • すぐに回答を!
  • 質問No.209085
  • 閲覧数591
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 9% (11/119)

いま、重複チェックをしているのですが、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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル12

ベストアンサー率 45% (207/457)

ご質問が判断出来ません。何がやりたいの? MoveFirstすれば先頭行に位置付けられています。 データベースとのやり取りをしたいのはどうにか理解出来ますが、何と判断して重複チェックをしたいの? 重複が無ければなにに対して更新をしたいの? どのような更新をお望みですか? レコードセットでSELECT文実行しているいるはずだけど場合によってはWHERE句でノットイコール条件(<> ...続きを読む
ご質問が判断出来ません。何がやりたいの?
MoveFirstすれば先頭行に位置付けられています。
データベースとのやり取りをしたいのはどうにか理解出来ますが、何と判断して重複チェックをしたいの?

重複が無ければなにに対して更新をしたいの?
どのような更新をお望みですか?

レコードセットでSELECT文実行しているいるはずだけど場合によってはWHERE句でノットイコール条件(<>や!=)で抽出するだけでもいい。

データベースとのやり取りはADO、DAOそれともそれ以外ですか?
とにかく情報が少なすぎて回答するにはちょっと無理があります。
冷静に補足お願いします。

DBMSはなんですか?Access?ORACLE、SQLServer、MySQL・・・
補足コメント
GERRARD

お礼率 9% (11/119)

プログラム載せます。
データベースは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
投稿日時 - 2002-01-31 14:07:24


  • 回答No.2
レベル12

ベストアンサー率 45% (207/457)

ADOはデータベースにアクセスする手段です。 Accessはデータベースです。 因みに開発はVB6.0ですか? GERRARDさん>このままでは、例えばデータベースに それを言うなら「単位テーブルには」です。 ですから慌てず冷静に補足して下さい。 フォーム上にコードと名称を持っていてそれが15行分あるというのは理解出来ました。 データベースでデータの格納位置については保証される物では御 ...続きを読む
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
このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ