Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите! Работа с БД Excel через MFC


Автор: Guest_Sergey 27.5.2003, 16:23
В Visual C++ 6.0 скомпилировал пример (из книги) простого MFC-приложения,
в котором осуществляется работа с базой данных MS Access через ODBC.
База данных представляет собой простейшую таблицу типа телефонной книжки и
физически расположена на том же компьютере, что и приложение. Как и написано
в книге, я проделал следующее:
1. После создания база данных была успешно зарегистрирована в системе
посредством "ODBC Data Sources" в Панели управления.
2. Для создания приложения был вызван "MFC Application Wizard".
3. На "Шаге 1" было выбрано: "Single Document".
4. На "Шаге 2" было выбрано: "Database view without file support", а в качестве
источника данных - ODBC: "Имя моей БД" (Recordset type = Snapshot).
Далее я оставил все опции проекта по умолчанию, добавил на форму нужные мне
Edit-контролы (поля в моей БД - текстовые) и связал их с соответствующими
переменными в классе CAppView (автоматически сгенеренным VC).
Как и положено для примера, приложение сразу заработало. Все записи считывались
из БД и отображались в окне моего приложения. Изменения, сделанные в окне моего
приложения также корректно переносились в исходную БД.

Теперь, собственно, к сути проблемы smile.gif У меня есть задача, аналогичная
рассмотренному выше примеру, с той лишь разницей, что в качестве БД
используется не MS Access, а книга MS Excel. Я соответствующим образом
зарегистрировал xls-файл в системе, используя Microsoft Excel Driver (ODBC).
Для правильной работы нужным мне Excel-ячейкам я задал имя (аналог имени
таблицы в MS Access), без чего в "MFC Application Wizard'е" я бы не смог
выбрать источник данных.
Далее заново создал MFC-приложение, где в качестве источника данных выбрал
новую Excel-БД. Так вот, считывание данных из БД (файла Excel) и их отображение
происходит нормально. Если же в окне моего приложения изменить любое из полей,
то при переходе к следующей записи (измененные данные при этом должны
автоматически сохраниться в БД) появляется сообщение об ошибке "Ошибка
синтаксиса или нарушение прав доступа", и изменения, естественно, не
сохраняются.
Замена опций "Database view WITHOUT file support" на "Database view WITH file
support", или "Snapshot" на "Dynaset", при создании проекта не помогла.
При регистрации Excel-БД в системе я убедился, что галочка "Read Only" снята.
Принудительно задавал "текстовый" формат Excel-ячеек - тоже не помогло.
В то же время, использование непосредственно SQL-команды для модификации
данных в поле Excel-таблицы (m_pSet->m_pDatabase->ExecuteSQL("UPDATE Table1
SET Field1 = 10 WHERE N = 1") сработало без всяких ошибок.
В чем здесь может быть проблема, почему считывание данных из Excel-БД
присходит нормально, а запись (посредством автоматически сгенеренного
MFC-кода) - нет.
ОС: Windows XP
MS Office 2000

Заранее спасибо :-)

Автор: valex13 9.6.2003, 10:57
Попробуй открыть xls и указать в настройках монопольных доступ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)