ADOで現在のレコードの次のレコードの値も取得する方法

このQ&Aのポイント
  • ADOを使用して現在のレコードの次のレコードの値も取得する方法について教えてください。
  • アクセスに対してADOを使用してデータを取得していますが、現在のレコードの値を取得する際に同時に次のレコードの値も取得することは可能でしょうか?
  • 現在のレコードの値と同時に次のレコードの値を取得するためにはどのようなコードを記述すれば良いでしょうか?
回答を見る
  • ベストアンサー

ADOで現在のレコードの次のレコードの値も取得

ADOで現在のレコードの次のレコードの値も取得するには? アクセスに対してADOでデータを取得しているのですが 例えばテーブルに フィールド1 あああ いいい ううう と入ってる時に、1レコード目のあああの値を取得しているときに、同時に次のレコードのいいいの値も取得することは可能ですか? Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM テーブル1", cn, adOpenStatic, adLockPessimistic For i = 1 To rs.RecordCount MsgBox rs("フィールド1") '現在のレコード MsgBox rs("フィールド1") + 1 '次のレコード rs.MoveNext Next rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これだとダメなようです。 あああ いいい が表示されるようにしたいのですが、どうすればいいか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.2

rs.MoveNextなどでカレントレコードを変更しないかぎりは次のレコードの値を取得することはできません。 よくある手法で先読み法というのがあります。 1つ前の値を変数に退避しておく方法です。 Dim Field1 As String Field1 = rs("フィールド1") rs.MoveNext For i = 2 To rs.RecordCount MsgBox Field1 MsgBox rs("フィールド1") Field1 = rs("フィールド1") rs.MoveNext Next

ppolluipy
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

あああ しかない場合の例外はどうする? いまあるレコードが あああ いいい ううう えええ なら、 あああ いいい いいい ううう ううう えええ で良いですか? if rs.RecordCount > 2 then  For i = 1 To rs.RecordCount-1   MsgBox rs("フィールド1") '現在のレコード   rs.MoveNext   MsgBox rs("フィールド1") '次のレコード  Next else  MsgBox rs("フィールド1") '現在のレコード  rs.MoveNext  MsgBox rs("フィールド1") '次のレコード endif でどうでしょう?

ppolluipy
質問者

お礼

ありがとうございます。

関連するQ&A

  • 数値のMAXの値を取得したい ADO VBA

    アクセスです。 ADOで該当のフィールドの数値のMAXの値を取得するにはどうすればいいですか? テーブルの番号フィールドには、 1 2 3 4 5 と入っているのですが、 この場合、一番大きい値は5なので MAX関数のようなもので5を返したいのですが ADOにそのようなプロパティはありますか? オブジェクトブラウザーでRecordsetを見てみましたが 見つけられませんでした。 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "SELECT * FROM T_test", cn, adOpenStatic, adLockPessimistic rs.Sort = "番号 DESC" Debug.Print rs("番号").Value rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub これで同じような動きは出来ますが、 もっとシンプルにできませんか?

  • ADOでアポストロフィー入りの値をフィルタしたい

    例えばレコードの値が「あああ'ああ」だった場合、 ----------------------------------------------------- Sub test() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim MyFileName As String MyFileName = CurrentProject.FullName cn.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source= " & MyFileName rs.Open "テーブル1", cn, adOpenKeyset, adLockOptimistic rs.Filter = "フィールド1 = " & "'あああ'ああ'" MsgBox rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub ----------------------------------------------------- とすると 実行時エラー3001「引数が間違った型、許容範囲外、または競合しています。」 になってしまいます。 ADOでアポストロフィー入りの値をフィルタする方法を教えてください。

  • DAOでのコードをADOへ書き直し

    Access2003、WinXPです。 レコードセットの取得関係をDAOで書いていたのですが ADOに途中から変更しました。 変数宣言を Public db As DAO.Database ⇒Public cn As ADODB.Connection Public rs As DAO.Recordset ⇒Public rs As ADODB.Recordset Public Fld As DAO.field  ⇒Public Fld As ADODB.field レコードセット取得を Set db = CurrentDb      Set rs = db.OpenRecordset(strSQL) ↓ Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open strSQL, cn レコードセット クローズを Set rs = Nothing Set db = Nothing ↓ rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing としました。今のところ動いているようですが、 何か勘違い、気をつけないといけない事等ありますでしょうか・・・?

  • アクセス ADO レコードの件数がおかしい

    アクセスADOでクエリの行数を取得したいのですが クエリが200行でも100行でも必ず12が返ります。 クエリ1は、一度12行の時にadoで数を取得し、その時は、正しく12が返ったのですが、 行数が変わっても12が返ります。 コードは、 Sub Sample() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "SELECT * FROM クエリ1", cn, adOpenStatic, adLockPessimistic Debug.Print rs.RecordCount rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub です。 Debug.Print DCount("*", "クエリ1") だと、正しいレコード数が取得されるのですが、ADOだとおかしいです。 クエリ1のSQL文は、 SELECT Q_作業用.* FROM Q_作業用; のように、別のクエリを持ってきています。 何が原因なのでしょうか? よろしくお願いします。

  • アクセスADO 複数のレコードがあるのに-1が返る

    アクセスのADOを作っています。 テーブルにレコードは複数あるのですが、Filterをすると必ず-1が返ります。 どうしてでしょうか? エラーになってるのでしょうか? ---------------------------------------------------- Set cn = CurrentProject.Connection myStr = "test" rs.Open "Tテーブル", cn, adOpenForwardOnly, adLockReadOnly rs.Filter = ("フィールド1=" & "'" & myStr & "'") MsgBox rs.RecordCount ’マイナス-1になる rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing ---------------------------------------------------- rs.Open の下に、MsgBox rs.RecordCountを置いても、-1になることから、Filter のせいではないと思うのですが 原因がわかりません。 ご教授よろしくお願いします。

  • ADOでレコードの値を一部変更したい

    アクセスのテーブル1には 番号(主キー) 内容1 内容2 というフィールドがあります。 エクセルからアクセスへADOを使って内容1フィールドだけを変更したのですがうまく行きません。 もともと 番号には「1」、内容1には「あああ」と入力されているとして 内容1を「いいい」に変更したい場合下記のコードを実行すると 「主キーが重複している」というエラーになるか、 全然関係ない番号の値が変わってしまい、テーブルがぐちゃぐちゃになってしまいます。 Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\○○○\Desktop\test1.mdb" Set rs = New ADODB.Recordset rs.Open "テーブル1", cn, adOpenStatic, adLockPessimistic 番号 = 1 rs("番号") = 番号 rs("内容1") = "いいい" rs.Update '保存 Set rs = Nothing Set cn = Nothing End Sub どうすれば「番号1の内容1の値を変更する」ことが可能なのでしょうか? よろしくお願いします。

  • ADO 英語を含むレコードを抽出したい

    テーブルに保存されてるフィールド1の英語が含まれているレコード(ABC株式会社 など)を抽出したいのですが 方法がわかりません。 *[a-z]* を使うんだなと思いますが、フィルタのかけかたがわかりません。 Sub test() Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset CN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ファイル名 RS.Open "テーブル1", CN, adOpenStatic, adLockOptimistic RS.Filter = "フィールド1 = " '←ここをどうすればいいでしょうか? RS.Close: Set RS = Nothing CN.Close: Set CN = Nothing End Sub サンプルを作ってみたのですが ご教示頂けないでしょうか? よろしくお願い致します。

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。

  • ADO1とADO2は意味は同じですか?

    Private Sub ADO1() Dim cn As New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub Private Sub ADO2() Dim cn As ADODB.Connection Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & CurrentProject.FullName cn.Close: Set cn = Nothing End Sub は、 Dim cn As ADODB.Connection Set cn = New ADODB.Connection を簡素化したものが Dim cn As New ADODB.Connection になるのでしょうか?

  • ACCESS ADOのMovePreviousについて

    毎度お世話になっております。 ACCESS2003を使用しています。 ACCESS ADOにて、レコードセットがeofになった後、 MovePreviousをし、MoveNextをし、 さらにもう一度MovePreviousをすると、 最終レコードの一つ前に戻ってしまいます。 テーブル1 フィールド1 フィールド2    1     あ    2     い    3     う    4     え    5     お コード Sub test()   Dim cn As New ADODB.Connection   Dim rs As New ADODB.Recordset   Set cn = CurrentProject.Connection   rs.Open "select * from テーブル1 order by フィールド1", cn, adOpenDynamic, adLockReadOnly   Do Until rs.EOF    rs.MoveNext   Loop   rs.MovePrevious   Debug.Print rs.Fields("フィールド1").Value   rs.MoveNext   rs.MovePrevious   Debug.Print rs.Fields("フィールド1").Value   rs.Close: Set rs = Nothing   cn.Close: Set cn = Nothing End Sub 一度目のdebug.printは5に、 二度目のdebug.printは4になります。 このような仕組みなのでしょうか。 ご教授お願いいたします。

専門家に質問してみよう