高度な機能: 高度なコーディング、相互運用性、マルチユーザー スキルが必要です。
この記事は、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
メモ このサンプル コードを使用して、この記事の「動作を再現する手順」セクションの動作を解決できます。
詳細
動作を再現する手順
新しい Access データベースで、次の新しいテーブルを作成し、TestTable という名前を付けます。
Table:TestTable ---------------------------- Field Name: ID Data Type: Autonumber Indexed: Yes (No Duplicates) Field Name: Name Data Type: Text
データシート ビューで新しいテーブルを開き、次のテスト データを入力します。
ID Name ----------------- 1 Beverages 2 Condiments 3 Confections 4 Dairy 5 Grains 6 Meat 7 Produce 8 Seafood
メモ この記事のサンプル コードでは、Microsoft ActiveX データ オブジェクトを使用します。 このコードを正しく実行するには、Microsoft ActiveX データ オブジェクト 2.x ライブラリ (2.x は 2.1 以降) を参照する必要があります。これを行うには、Visual Basic エディターの [ツール] メニューの [参照] をクリックし、[Microsoft ActiveX Data Objects 2.x Library チェック] ボックスがオンになっていることを確認します。
モジュールを作成し、[宣言] セクションに次の行を入力します (まだ存在しない場合)。
Option Explicit
次の手順を入力します。
Sub DelFirstRec()
Dim rs As New ADODB.Recordset
rs.Open "Select * from TestTable", CurrentProject.Connection, adOpenKeyset
rs.MoveFirst
rs.Delete
rs.Close
End Sub
この関数をテストするには、[イミディエイト] ウィンドウに次の行を入力し、Enter キーを押します。
DelFirstRec
この記事の「現象」セクションに記載されているエラー メッセージが表示されることに注意してください。 また、テーブルをチェックすると、レコードが削除されていないことがわかります。