• 締切済み

重複チェック

yanmaaの回答

  • yanmaa
  • ベストアンサー率45% (207/457)
回答No.2

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

  • カレント行取得

    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件目にあると思うので、それを”任意”の行にしたいのですが教えてください。

  • 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です。

  • リストボックス

    Do While Not rs.EOF   'データがある場合 Form2.List1.AddItem rs.Fields("顧客番号") & " " & rs.Fields("得意先名") rs.MoveNext Loop こうしたら、いちらんには 顧客番号  得意先名 111111111111   ああああ 11111111111   いいい と入っていて、得意先名をきちんと”ああああ”にそれえたいのですけどできるでしょうか? 桁数の指定とかできるでしょうか?

  • VBA ADOに関して

    お世話になります。 VBAに関して質問があります。 ADOでDBから値を取得する際、 TEXT型の値が全く取れてきません。 どなたか取得方法をご教授下さい。 宜しくお願い致します。 DB:Sybase OS: RedHat 8.0 Dim rs As ADODB.Recordset Dim sql As String sql = "select * from " & tblName //dbはADODB.Connection Set rs = db.Execute(sql) Do While Not rs.EOF //ここでTEXT型だと、取れてきません。  If IsNull(rs.Fields('Field名').Value) Then End If rs.MoveNext Loop

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

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

  • 【VB】コンボボックスにデータベースから取り出した値を入れたい

    VB2005です。 表題の通りですがやり方がよくわかりません。 データベースに接続し、 SQLで重複しない値を取り出すところまではできています。 SQL=SELECT DISTINCT FieldName FROM TableName VB6の時はこんなソースでした Do Until rs.EOF    Combo1.AddItem.Fields("FieldName")    rs.MoveNext Loop VB2005ではどう書くのでしょう? よろしくご教授ください。

  • VB6 重複チェックについて

    お世話になります。 次の処理をVisual Basic6.0で教えてください。 1.Text1にキー入力した値をコマンドボタンクリックすると、Text1の値を保存します。 2.次にText1に新たに入力してコマンドボタンクリックで前項で保存した値と重複して   いないかチェックして重複無しならText1の値を保存します。 3.Text1に新たに入力して・・・・重複チェックして・・・・ といった具合に保存する値と重複チェックする対象の値がどんどん増えていきます。 さすがに10,000件はいかないですが。 保存先は読み書き込みの時間も考慮してVB内のTextBOXが第1希望、外部のtxtファイルやcsvファイルは第2希望としたいです。 If Text1=保存値 Then  処理 else  処理 End If 保存値をText2として行いましたが、完全一致でないとダメでした。 入力値:保存値=1:n(入力値が複数の保存値と重複したかどうか)が知りたいです! お手数おかけしますが、何卒よろしくお願いします。

  • Excel VBA EOFに関して

    テキストボックスにDateを入力し、SQLServerに接続しSelectの結果をシートに書き込むだけのものなのですが、「BOFとEOFのいずれかがTrueになっているか、または現在のレコードが削除されています」というエラーでさっぱりわかりません。どなたかアドバイスをお願い致します。 -前後省略- stdate = UserForm1.stdate.Value endate = UserForm1.endate.Value strsql = "select ***" strsql = strsql & "from ***" strsql = strsql & "where *** and ***.start_date between '" & stdate & "' and '" & endate & "' " con.Open connectionString Set rs = con.Execute(strsql) Sheets("Data1").Select rs.MoveFirst i = 2 Do Until rs.EOF Cells(i, 1) = rs.Fields(0).Value Cells(i, 2) = rs.Fields(1).Value Cells(i, 3) = rs.Fields(2).Value Cells(i, 4) = rs.Fields(3).Value i = i + 1 rs.MoveNext Loop con.Close Set con = Nothing Exit Sub Err_DBConnectOpen: MsgBox Err.Description If con.State <> ADODB.adStateClosed Then con.Close End If Set con = Nothing End Sub

  • ODBCでMoveNextがうまく動作しないようなのですが

    まだVB歴1年ないので説明もうまくできないかも知れませんが どなたか教えていただければ助かります。 Dim cn as ADODB.Connection Dim rs as ADODB.Recordset Set cn = New ADODB.Connection cn.IsolationLevel = adXactRepeatabelRead cn.Open ***** Set rs = New ADODB.Recordset rs.CursorType = adOpenDynamic rs.LockType = asLockPessimistic rs.ActiveConnection = cn rs.Open ***** 上記のように設定したのち データ読み込み rs.MoveFirst Do until rs.EOF aaa = rs.Fields("ID").Value    中略 rs.MoveNext Loop ファイルクローズして他の処理したのち 再びファイルオープンして rs.MoveFirst For *** Set rs = cn.Execute("UPDATE テーブル名 SET ID = ***** ") 中略 rs.MoveNext Next *** ファイルクローズ 上記のMoveNextがおかしいと思うのですが 他のところかもしれませんが悩んでいます。 この内容でわかっていただけるか心配ですが よろしくお願いします。

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

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