PRB: "操作は更新可能なクエリを使用する必要があります" ODBC を使用して Excel にアクセスする場合
現象
ADO と ODBC を使用して Excel ワークシートを編集すると、ADO DataControl オブジェクトを使用すると、次のエラー メッセージが表示されることがあります。
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
ADO コードで生成される Recordset オブジェクトを使用する場合、ADO と ODBC を使用して Excel ワークシートを編集するときに、次のエラー メッセージが表示されることがあります。
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
原因
この問題は、ReadOnly として保存または開かれたワークシートを編集しようとすると発生します。
注:
ReadOnly は、データ ソース名 (DSN) の有無にかかわらず、Excel への ODBC 接続の既定の設定です。 そのため、ユーザーは常にその設定を変更してデータを編集する必要があります。
解決方法
この問題を解決するには、次の方法を使用します。
Recordset オブジェクトの LockType プロパティが ReadOnly に設定されていないことを確認します。
開こうとしているファイルが ReadOnly として保存されていないことを確認します。
DSN を介して接続する場合は、次の手順に従います。
- コントロール パネルを開き、[ODBC データ ソース管理者] をクリックします。
- DSN をダブルクリックします。
- [ODBC Microsoft Excel セットアップ] ダイアログ ボックスで、[オプション] をクリックします。
- [ReadOnly チェック] ボックスが選択されていないことを確認します。
DSN レス接続を使用している場合は、必ず 接続文字列に "ReadOnly=0" オプションを含めます。 例:
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
状態
この動作は仕様です。
詳細情報
動作を再現する手順
Visual Basic で新しい Standard EXE プロジェクトを作成します。
[プロジェクト] メニューの [参照] をクリックし、Microsoft ActiveX データ オブジェクト ライブラリへの参照を追加します。
[コマンド] ボタンを Form1 に追加します。
Form1 に次のコードを追加します。
Dim rs As ADODB.Recordset Dim cn As ADODB.Connection Private Sub Form_Load() Command1.Caption = "Edit" End Sub Private Sub Command1_Click() Dim DocPath As String DocPath = App.Path & "\Test.xls" Set cn = New Connection Set rs = New Recordset cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1" rs.LockType = adLockOptimistic rs.Open "TB1", cn rs.AddNew rs.Fields(1).Value = "New Value" rs.Update rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub
アプリケーションを保存します。
新しい Excel ワークシートを作成し、ワークシートを Test.xls として保存します。
[挿入] メニューの [名前] をポイントし、[定義] をクリックします。
Excel ワークシート内に新しいテーブルを作成し、テーブルに TB1 という名前を付けます。
Visual Basic アプリケーションと同じフォルダーにワークシートを保存します。
F5 キーを押してアプリケーションを実行します。
関連情報
詳細については、次の記事を参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示