次の方法で共有


エラー "Operation must use an updateable query" when you access Excel through ODBC (操作で更新可能なクエリを使用する必要があります)

症状

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 経由で接続する場合は、次の手順に従います。

    1. コントロール パネルを開き、[ODBC データ ソース 管理者] を選択します。
    2. DSN をダブルクリックします。
    3. [ODBC Microsoft Excel セットアップ] ダイアログ ボックスで、[オプション] を選択します。
    4. [ReadOnly] チェック ボックスがオフになっていることを確認します。
  • DSN レス接続を使用している場合は、接続文字列に "ReadOnly=0" オプションを含めるようにしてください。 例えば次が挙げられます。

    cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
    

ステータス

この動作は設計によるものです。

詳細情報

動作を再現する手順

  1. Visual Basic で新しい Standard EXE プロジェクトを作成します。

  2. [プロジェクト] メニューの [参照] を選択し、Microsoft ActiveX データ オブジェクト ライブラリへの参照を追加します。

  3. Form1 にコマンド ボタンを追加します。

  4. 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  
    
  5. アプリケーションを保存します。

  6. 新しい Excel ワークシートを作成し、そのワークシートを Test.xlsとして保存します。

  7. [挿入] メニューの [名前] をポイントし、[定義] を選択します。

  8. Excel ワークシート内に新しいテーブルを作成し、テーブルに TB1 という名前を付けます。

  9. ワークシートを Visual Basic アプリケーションと同じフォルダーに保存します。

  10. F5 キーを押してアプリケーションを実行します。

リファレンス

詳細については、「 Office スペース: Microsoft Office アプリケーションのスクリプト作成のヒントとテクニック」を参照してください。