Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > ODBC драйвер


Автор: Kirow 13.10.2011, 16:25
Собственно делаю в рамках лабораторной работы программку, которая бы читала и аксес и эксель файлы.
проблема появилась с файлами .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);

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