• ベストアンサー

アクセス2000(ADO)のレコード更新について

1件しかレコードがない[リスト連番T]テーブルのレコードを読みだして、(フィールド)リストNOをプラス1して更新したいです。 DOAが混ざっているのか、下記のようにエラーがでます。プラス1して更新する正しいプログラムを教えて下さい。 Private Sub リスト_Click() Dim DBS As Databasu Dim CNC As New ADODB.Connection Dim RST As New ADODB.Recordset Dim LISTNO As Intejer Set CNC = CurrentProject.Connection RST.Open "リスト連番T", CNC, adOpenKeyset,adLockOptimistic, adCmdTableDirect LISTNO = RST!リストNO RST.Close Set RST = Nothing CNC.Close Set CNC = Nothing Set DBS = CurrentDb Set RST = DBS.OpenRecordset("リスト連番T") With RST -----.Edit で コンパイルエラー-----   メソッドまたはデータメンバーがみつかりません .Edit !リストNO = LISTNO + 1 .Update .Close

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

こんなではダメでしょうか?レコードが1個だけ、存在している事を前提にしています。 Sub ADORecordsetUpdate() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "リスト連番T", cn, adOpenKeyset, adLockOptimistic rs.Update "リストNO", rs!リストNO.Value + 1 rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub <参考> http://www.accessclub.jp/ado/10.html

zoro180
質問者

お礼

今回のにぴったりかと思います。 ありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

下記でやってみてください・ Database Integer など雑な誤りも在る。 ーー Sub test24() Dim DBS As Database ' Dim CNC As New ADODB.Connection Dim RST As New ADODB.Recordset Dim LISTNO As Integer ' Set CNC = CurrentProject.Connection RST.Open "リスト連番T", CNC, adOpenKeyset, adLockOptimistic, adCmdTableDirect MsgBox RST!リストNO LISTNO = RST!リストNO RST.Close Set RST = Nothing CNC.Close Set CNC = Nothing '-------------- Dim DB As DAO.Database Set DB = CurrentDb Dim RS As DAO.Recordset Set RS = DB.OpenRecordset("リスト連番T") '-----.Edit で コンパイルエラー----- ' メソッドまたはデータメンバーがみつかりません RS.MoveFirst MsgBox RS!リストNO RS.Edit RS!リストNO = LISTNO + 1 MsgBox RS!リストNO RS.Update MsgBox RS!リストNO RS.Close End Sub ーー DBS,RSTなども別にしないと、重複したらダメではないかな。 なぜ前半はADOで後半はDAOなのかな。 どこかをコピーして告ぎ合わせ実行してエラーで投げ出したような感じ。

zoro180
質問者

お礼

見よう見まねで作成しているド素人でして・・・ ありがとうございました。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

いろいろ間違いがあるようですが、 CurrentProject.Connection.Execute "UPDATE リスト連番T SET リストNO = リストNO +1;" でできそうですが。 ADOでするのなら Dim RST As New ADODB.Recordset RST.Open "リスト連番T", CurrentProject.Connection, adOpenKeyset,adLockOptimistic If (Not RST.EOF) Then ' 最低限レコードがあるかは判別した方が良いと思います   RST!リストNO = RST!リストNO + 1   RST.Update End If RST.Close かと思います。 (adCmdTableDirect の箇所は特に指定したことありませんので、削除していいものかわかりません) 間違い箇所) Dim DBS As Databasu → Dim DBS As Database Dim LISTNO As Intejer → Dim LISTNO As Integer 間違いを見つける手っ取り早い方法の1つに Option Explicit を先頭で指定しておく人もいます。 Explicit については、ヘルプを参照してください。

zoro180
質問者

お礼

Explicit などいろいろ丁寧にありがとうございました。

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

> With RST に対応するEnd Withは無くて大丈夫? 「参照」の順序を入れ替えてみるとか。 DAOよりもADOが上位にあるか、確認して見られては?

zoro180
質問者

お礼

早々に回答頂きましたが、「参照」の順序を入れ替える の意味がわかりませんでした。 ありがとうございました。

関連するQ&A