Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ODBC драйвер, .xlsx & .accdb 
:(
    Опции темы
Kirow
Дата 13.10.2011, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 1.11.2007

Репутация: нет
Всего: нет



Собственно делаю в рамках лабораторной работы программку, которая бы читала и аксес и эксель файлы.
проблема появилась с файлами .xlsx & .accdb, в то время как .xls и .mdb открываются благополучно. А вот на  .xlsx & .accdb драйвер не находится. 
В общем если вкратце, то как получить имя драйвера для взаимодействия с файлами форматов  .xlsx & .accdb?

В источниках данных ODBC, названия драйверов указанны со всеми расширениями (примерно так "Microsoft Access Driver (*.mdb, *.accdb)"), но функция поиска драйвера возвращает только для старого формата ("Microsoft Access Driver (*.mdb)"). С экселем такая же проблема. Попытка вписать название драйвера вручную (того, что указанно в источниках данных ODBC) заканчивалась ошибкой, что драйвер либо не найден либо не указан.

Ну и возможно ли вообще через ODBC работать с этими форматами?А то может я без толку на месте топчусь...

ну и некоторые отрывки кода, может нужны для полной картины.
Код

CString CChildView::GetDriver()
{
    char szBuf[2001];
    WORD cbBufMax = 2000;
    WORD cbBufOut;
    char *pszBuf = szBuf;
    CString sDriver;

    // Get the names of the installed drivers ("odbcinst.h" has to be included )
    if(!SQLGetInstalledDrivers(szBuf,cbBufMax,& cbBufOut))
        return "";

    // Search for the driver...
    do
    {
        if( strstr( pszBuf, "Excel" ) != 0 ) //например драйвер для Excel'a (можно в принципе по расширению xls искать
        {                                                //и получить такой-же результат, а вот если искать по xlsx - результата не будет
            // Found !
            sDriver = CString( pszBuf );
            break;
        }
        pszBuf = strchr( pszBuf, '\0' ) + 1;
    }
    while( pszBuf[1] != '\0' );

    return sDriver;
}


Код

CString sDriver = GetDriver();
    CString sDsn;

    if( sDriver.IsEmpty() )
    {
        AfxMessageBox("Не найдено драйвера");
        return;
    }
    //AfxMessageBox(sDriver);
    sDsn.Format("ODBC;DRIVER={%s};DSN='';DBQ=%s",sDriver,pathName); //pathName - путь к файлу
database.Open(NULL,false,false,sDsn);


Это сообщение отредактировал(а) Kirow - 13.10.2011, 16:32
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0401 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.