Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > 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). Как и положено для примера, приложение сразу заработало. Все записи считывались из БД и отображались в окне моего приложения. Изменения, сделанные в окне моего приложения также корректно переносились в исходную БД. Теперь, собственно, к сути проблемы ![]() рассмотренному выше примеру, с той лишь разницей, что в качестве БД используется не 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 и указать в настройках монопольных доступ. |