- ベストアンサー
アクセス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
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんなではダメでしょうか?レコードが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
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
下記でやってみてください・ 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なのかな。 どこかをコピーして告ぎ合わせ実行してエラーで投げ出したような感じ。
お礼
見よう見まねで作成しているド素人でして・・・ ありがとうございました。
- 30246kiku
- ベストアンサー率73% (370/504)
いろいろ間違いがあるようですが、 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 については、ヘルプを参照してください。
お礼
Explicit などいろいろ丁寧にありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
> With RST に対応するEnd Withは無くて大丈夫? 「参照」の順序を入れ替えてみるとか。 DAOよりもADOが上位にあるか、確認して見られては?
お礼
早々に回答頂きましたが、「参照」の順序を入れ替える の意味がわかりませんでした。 ありがとうございました。
お礼
今回のにぴったりかと思います。 ありがとうございました。