• 締切済み

カレント行取得

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

みんなの回答

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

再びmaruru01です。 もし、Accessのそのテーブルのレコードを、 変更や追加はするが、削除はしない ということであれば、そのテーブルに新しく数値のフィールドを作って、一番上のレコードから順に、 1,2,3・・・ という風に連番をつけてはどうでしょう。 そうすれば、Findを使って、そのフィールドの値で検索出来ます。 連番は、15個ぐらいなら手入力出来ますし、もし実はレコードが多いということなら、コードで書いて実行してもいいと思います。 では。

GERRARD
質問者

補足

すみませんが、Findの使い方を教えていただけないでしょか?ヘルプ機能がないもので・・・

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.2

こんにちは。maruru01です。 ちょっとお聞きしたいんですが、 どういう条件で、"5行目"を取り出すのでしょうか。 どこかのフィールドの値がある条件のデータでしょうか。それなら、Findを使えばいいと思います。 それとも、"行数"が問題なんでしょうか。でも、行数は、Accessでテーブルをいじってしまう(ソート)と変わってしまいますけど。 データの内容に関係なく移動するのはMove系(先頭、前、後ろ、末尾)で、任意の条件での移動はFindになります。 補足をお願いします。 では。

GERRARD
質問者

補足

そうですね、”行数”が問題になっています。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)
回答No.1

まずちょっと変更したほうがいい点です。 >If Text1(0).Text <> rs.Fields(1) Then ↑のような条件判定をレコードごとに行うのはよくありません。 今は3件だけかもしれませんが、1000件のデータを対象にすると 時間がとてもかかります。 SQLでwhere句で条件を指定してもっとレコードを絞り込むべきです。 >それを”任意”の行にしたいのですが教えてください。 なぜ任意にしたいのでしょう。 SQLを再発行するとか、MoveFirstを使用してはだめなのですか?

GERRARD
質問者

補足

それじゃあ、ちょっと言い方を変えます。ACCESSにデータが10件は入っていて、5行目のデータを取り出したいときにはどうすればいいですか?   moveXXXでないですか?

関連するQ&A

  • 重複チェック

    いま、重複チェックをしているのですが、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

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

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

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

  • データ件数の表示について

    はじめまして、TXTFILEをACCESS97のテーブルにインポート定義で読み込んで 目的の文字列がフィールドにあったらMSGBOXで表示させたいのですがうまくいきません。 そのコードを試したところ他の文字列の分も表示されてしまいます。 そのコードを記入したので、その原因を教えてください。お願いします。 Private Sub Cmd_KensuuHyouji_Click() Dim i As Long Set G_CurrentDB = CurrentDb() Set Rs = G_CurrentDB.OpenRecordset("Table") '変数を空白にする GetFileName = "" 'フォームのTextBoxにフォーカスを移す Text1.SetFocus 'エラー回避 If IsNull(Text1.Text) Or (Text1.Text) = "" Then MsgBox "ファイルを選択してからクリックしてください", vbOKOnly + vbCritical Exit Sub End If 'ファイル名の左12桁が目的のファイル名なら変数にファイル名をセット If Left$(Text1.Text, 12) = "1013405_0502" Then 'GetFileName変数にText1の値をセット    GetFileName = Text1.Text End If 'ファイルをテキストファイルとしてコピーする FileCopy PathName & GetFileName, PCstPath & "MSCT.TXT" 'テキストファイルをMSACCESS97にインポートする DoCmd.TransferText acImportDelim, "インポート定義", _ "Table", PCstPath & "MSCT.TXT", True 'インポート後レコードセットを最初の行へ戻す、でないと、件数0件で表示される Rs.MoveFirst Do Until Rs.EOF If Rs.Fields("発注者コード").Value = "1013405" Then i = Rs.RecordCount End If Rs.MoveNext Loop MsgBox "データ件数は" & Space$(1) & i & Space$(1) & "件です" Rs.Close G_CurrentDB.Close Set Rs = Nothing Set G_CurrentDB = Nothing End Sub

  • 特定行の背景色を変えたいのですが

    vb6で組んでおりますがformの明細行はListView1です。 If ds.RecordCount > 0 Then Do Until ds.EOF Set oListItem = ListView1.ListItems.Add() oListItem.Text = ds.Fields("商品コード").Value oListItem.SubItems(1) = ds.Fields("JANコード").Value oListItem.SubItems(2) = ds.Fields("商品名").Value oListItem.SubItems(3) = ds.Fields("規格").Value if oListItem.SubItems(1) = '' then oListItem.ForeColor = RGB(250, 250, 250) oListItem.BackColor = RGB(250, 180, 180)-->(1)コンパイルエラー endif     ds.MoveNext Loop (1)コンパイルエラー⇒メソットが見つかりません。 がどうしても解消できません・・・初心者です。 ご教示のほどよろしくお願いします。

  • リストボックス

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

  • "カレントレコードがありません"とでてきます

    Access97を使用しています。 データは テーブルAの項目B、項目Cが下記のようにあるとします。 フォーム上のText"B"に項目Bを入力します。 項目B 項目C 11 a 11 b 22 aa 22 bb 22 cc 33 aaa 33 ccc この時 Set DB = CurrentDb() strSQL = "SELECT * FROM A WHERE " strSQL = strSQL + "B='" & Me.B & "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) RS.MoveFirst RS.MoveLast m = RS.RecordCount For i = 1 To m COIL_N = RS.Fields("C") Call RS.MoveNext Next i 上記のようなモジュールですが、例えば 項目Bの"11"を選んだ時、項目Cの二番目のデータbが 取得できません。 "カレントレコードがありません"とでてきます。何故でしょうか?

  • vbsで最後の行を削除する

    csvファイル(test.csv)からフラグが1のものを抽出するのですが 最終行に改行がはってしまうので、最終行を削除してcsvファイルを保存したいのですが、 うまくいきません。ご教授ください。 Dim objADO Dim i Dim wsql Dim rs Dim wHeader Dim wData Dim objFSO Dim objFile Set objADO = CreateObject('ADODb.connection') objADO.Open "Driver={Microsoft Text Driver (*.txt;*csv)};"&_ "DBQ=C:\test;"&_ "ReadOnly=1" '抽出条件 wsql="select * from test.csv where フラグ='1'" Set rs =objADO.Execute(Wsql) 'ヘッダ部 wHeader='ID,商品名,商品番号,フラグ" 'データ部 wData="" Do While rs.EOF=False For i = 0 to rs.fields.count - 1 if i = (rs.fields.count -1) then wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & chr(13) else wData = wData & chr(34) & rs.Fields.ltem(i) & chr(34) & "," end if next rs.MoveNext loop '最終改行削除? rs = Left(wData,Len(wData) - Len(chr(13))) 'ファイル出力 set objFSO = createObject("Scripting.FileSystemObject") set objFile = objFSO.OpentextFile("c:\test\test.csv",2, true) if err.Number = 0 then objFile.WriteLine(wHeader) objFile.WriteLine(wData) objFile.close end if set objFile = Nothing set objFSO = Nothing set objADO = Nothing ****************************************** ID,商品名,商品番号,フラグ 100,パソコン,100-12,1 200,ペン,200-11,1 ***ここの改行を削除する***** 〔EOF〕

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

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

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

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

専門家に質問してみよう