Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Кросплатформенное получение списка всех источников данных доступных через ODBC
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Разработка баз данных
Litkevich Yuriy
подскажите есть ли возможность, сохранив кросплатформенность, получить список всех источников данных доступных через ODBC?
Т.е. для случая с Виндовозом, получить тот же список БД , который мы видим в "Панель управления"->"Администрирование"->"Источники данных ODBC" , в частности интерисует то, что на вкладке "Системный DSN".
ViGOur
Я знаю как это получить на WinAPI и MFC (в котором используется тоже API), но вот на кроссплатформенное получение интересно было бы посмотреть тоже. :)

p.s. если не найдешь кроссплатформенный способ, могу подсказать как для винды такое сделать.
Litkevich Yuriy
Подскажи как для винды, желательно чистый WinAPI, не MFC т.е.
ViGOur
Вот, но для него требуется задать hWnd, иначе не работает, может быть и можно как-то побороть, но я не пробовал.
    #define MAXBUFLEN   255
    HENV   hEnv = SQL_NULL_HENV;
    HDBC   hDbc;
    RETCODE rc = 0;

    SQLCHAR      ConnStrIn[MAXBUFLEN] = "";
    SQLCHAR      ConnStrOut[MAXBUFLEN] = "";
    SQLSMALLINT   cbConnStrOut = 0;
    UWORD wConnectOption = SQL_DRIVER_COMPLETE;

    rc = SQLAllocEnv(&hEnv);

    if( !(SQL_SUCCESS == rc) || (SQL_SUCCESS_WITH_INFO == rc))
    {
        printf("SQLAllocEnv failed: Error # %#x\n", rc);
        exit(-1);
    }

    rc = SQLAllocConnect(hEnv, &hDbc);
    if( !(SQL_SUCCESS == rc) || (SQL_SUCCESS_WITH_INFO == rc))
    {
        printf("SQLAllocConnect failed: Error # %#x\n", rc);
        exit(-1);
    }

    int nRet = ::SQLSetConnectOption( hDbc, SQL_LOGIN_TIMEOUT, 15);
    SQLRETURN retcode = SQLDriverConnect( hDbc, hWnd,
                                          ConnStrIn, SQL_NTS,
                                          ConnStrOut, MAXBUFLEN,
                                          &cbConnStrOut, wConnectOption);


    SQLCHAR*    theDiagState = new SQLCHAR[50];
    SQLINTEGER    theNativeState;
    SQLCHAR*    theMessageText  = new SQLCHAR[255];
    SQLSMALLINT    iOutputNo;

    // здесь получаем описание ошибки, если она есть
    SQLGetDiagRec( SQL_HANDLE_DBC, hDbc,
                   1, (SQLCHAR*)theDiagState, &theNativeState,
                   (SQLCHAR*)theMessageText, 100,
                   &iOutputNo);
             printf( "Error :%s\n", theMessageText);
Соответственно нужно добавить обработку ошибок и прочее... ;)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.