crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Кросплатформенное получение списка всех источников данных доступных через ODBC
Litkevich Yuriy
  опции профиля:
сообщение 9.2.2008, 15:51
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


подскажите есть ли возможность, сохранив кросплатформенность, получить список всех источников данных доступных через ODBC?
Т.е. для случая с Виндовозом, получить тот же список БД , который мы видим в "Панель управления"->"Администрирование"->"Источники данных ODBC" , в частности интерисует то, что на вкладке "Системный DSN".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 9.2.2008, 20:50
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3289
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Я знаю как это получить на WinAPI и MFC (в котором используется тоже API), но вот на кроссплатформенное получение интересно было бы посмотреть тоже. :)

p.s. если не найдешь кроссплатформенный способ, могу подсказать как для винды такое сделать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 9.2.2008, 21:01
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9655
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Подскажи как для винды, желательно чистый WinAPI, не MFC т.е.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 11.2.2008, 10:29
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3289
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Вот, но для него требуется задать 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);
Соответственно нужно добавить обработку ошибок и прочее... ;)

Сообщение отредактировал ViGOur - 11.2.2008, 10:29
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 21.7.2019, 19:47