Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Симптомы
При редактировании листа Excel с помощью ADO и ODBC может появиться следующее сообщение об ошибке, если вы используете объект ADO DataControl:
[Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Если вы используете объект Recordset, созданный с помощью кода ADO, при редактировании листа Excel с помощью ADO и ODBC может появиться следующее сообщение об ошибке:
Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.
Причина
Эта проблема возникает при попытке изменить лист, сохраненный или открытый как ReadOnly.
Замечание
ReadOnly — это параметр по умолчанию для подключения ODBC к Excel с именем источника данных (DSN или без нее). Таким образом, пользователь должен всегда изменять этот параметр для изменения данных.
Резолюция
Чтобы устранить эту проблему, используйте следующие методы:
Убедитесь, что для свойства LockType объекта Recordset не задано значение ReadOnly.
Убедитесь, что файл, который вы пытаетесь открыть, не сохраняется как ReadOnly.
Если вы подключаетесь через DSN, выполните следующие действия.
- Откройте панель управления и выберите администратора источника данных ODBC.
- Дважды щелкните ваш DSN.
- В диалоговом окне установки Microsoft Excel ODBC выберите "Параметры".
- Убедитесь, что флажок ReadOnly снят.
Если вы используете подключение без dsN, обязательно включите параметр ReadOnly=0 в строку подключения. Рассмотрим пример.
cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
Состояние
Это поведение является намеренным.
Дополнительная информация
Действия по воспроизведению поведения
Создайте проект STANDARD EXE в Visual Basic.
В меню "Проект" выберите "Ссылки" и добавьте ссылку на библиотеку объектов данных 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 и назовите таблицу ТБ1.
Сохраните лист в той же папке, что и приложение Visual Basic.
Нажмите клавишу F5, чтобы запустить приложение.
Ссылки
Дополнительные сведения см. в разделе Office Space: советы и рекомендации по созданию сценариев приложений Microsoft Office.