次の方法で共有


ADO AddNew メソッドまたは Delete メソッドを使用してレコードを追加したり、レコードを削除したりすることはできません

高度な機能: 高度なコーディング、相互運用性、マルチユーザー スキルが必要です。

この記事は、Microsoft Access データベース (.mdb または .accdb) と Microsoft Access プロジェクト (.adp) に適用されます。

現象

ActiveX データ オブジェクト (ADO) を使用している場合、Recordset オブジェクトの AddNew メソッドまたは Delete メソッドを使用し、ロックの種類が指定されていないレコードセットを開くと、次のいずれかのエラー メッセージが表示されることがあります。

Run-time error '3251': Object or provider is not capable of performing requested operation. 

または

Run-time error '3251':
The operation requested by the application is not supported by the provider. 

または

Run-time error '3251':
Current Recordset does not support updating. This may be a limitation of the provider, or of the selected locktype. 

原因

既定では、ADO レコードセットはロックタイプの adLockReadOnly で開かれますが、追加と削除は許可されません。

解決方法

追加と削除を許可するには、次のコード サンプルのように、ロックの種類が adLockOptimistic または adLockPessimistic のレコードセットを開きます。

Sub DelFirstRec()
   Dim rs As ADODB.Recordset
   Set rs = New ADODB.Recordset

rs.Open "Select * from TestTable", CurrentProject.Connection, _
            adOpenKeyset, adLockOptimistic
   rs.MoveFirst
   rs.Delete
   rs.Close
End Sub

メモ このサンプル コードを使用して、この記事の「動作を再現する手順」セクションの動作を解決できます。

詳細

動作を再現する手順

  1. 新しい Access データベースで、次の新しいテーブルを作成し、TestTable という名前を付けます。

    Table:TestTable
    ----------------------------
    Field Name: ID
    Data Type: Autonumber
    Indexed: Yes (No Duplicates)
    
    Field Name: Name
    Data Type: Text
    
  2. データシート ビューで新しいテーブルを開き、次のテスト データを入力します。

    ID Name
    -----------------
    1 Beverages
    2 Condiments
    3 Confections
    4 Dairy
    5 Grains
    6 Meat
    7 Produce
    8 Seafood
    
  3. メモ この記事のサンプル コードでは、Microsoft ActiveX データ オブジェクトを使用します。 このコードを正しく実行するには、Microsoft ActiveX データ オブジェクト 2.x ライブラリ (2.x は 2.1 以降) を参照する必要があります。これを行うには、Visual Basic エディターの [ツール] メニューの [参照] をクリックし、[Microsoft ActiveX Data Objects 2.x Library チェック] ボックスがオンになっていることを確認します。

    モジュールを作成し、[宣言] セクションに次の行を入力します (まだ存在しない場合)。

    Option Explicit

  4. 次の手順を入力します。

Sub DelFirstRec()
   Dim rs As New ADODB.Recordset

rs.Open "Select * from TestTable", CurrentProject.Connection, adOpenKeyset
   rs.MoveFirst
   rs.Delete
   rs.Close
End Sub

  1. この関数をテストするには、[イミディエイト] ウィンドウに次の行を入力し、Enter キーを押します。

    DelFirstRec

    この記事の「現象」セクションに記載されているエラー メッセージが表示されることに注意してください。 また、テーブルをチェックすると、レコードが削除されていないことがわかります。