На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела C/C++: Базы данных
Модераторы: B.V.
  
    > SQLxxxxConnect
      Всем известно, что ODBC API предостваляет 3 функции подключения к DSN или драйверу:
      SQLConnect (...)
      SQLBrowseConnect (...)
      SQLDriverConnect (...)

      SQLRETURN SQLConnect(
          SQLHDBC     ConnectionHandle,
          SQLCHAR *     ServerName,
          SQLSMALLINT     NameLength1,
          SQLCHAR *     UserName,
          SQLSMALLINT     NameLength2,
          SQLCHAR *     Authentication,
          SQLSMALLINT     NameLength3);

      SQLRETURN SQLBrowseConnect(
          SQLHDBC     ConnectionHandle,
          SQLCHAR *     InConnectionString,
          SQLSMALLINT     StringLength1,
          SQLCHAR *     OutConnectionString,
          SQLSMALLINT     BufferLength,
          SQLSMALLINT *     StringLength2Ptr);

      SQLRETURN SQLDriverConnect(
          SQLHDBC     ConnectionHandle,
          SQLHWND     WindowHandle,
          SQLCHAR *     InConnectionString,
          SQLSMALLINT     StringLength1,
          SQLCHAR *     OutConnectionString,
          SQLSMALLINT     BufferLength,
          SQLSMALLINT *     StringLength2Ptr,
          SQLUSMALLINT     DriverCompletion);

      Вот так. У меня встала такая проблема: нужно программно безо всяких выскакивающих системных диалогов уточнения ConnectString подключиться к любому системному DSN.
      Нужно вывести список DSN юзеру, и затем спросить у него ОБЯЗАТЕЛЬНЫЕ префиксы для выбранного им DSN.

      Идеально было бы использовать SQLBrowseConnect передавая ему DSN имя и получать в OutConnectString перечисление обязательных префиксов. Нo беда в том что не все драйвера эту функцию поддерживают (Microsoft Access и Excel к примеру). SQLGetDiagRec возвращал такое описание ошибки.
      Остаётся вариант SQLDriverConnect последний параметр которого должен быть SQL_DRIVER_NOPROMPT и WindowHandle = NULL.
      Вот встала проблема такая. Если InConnectString = "DSN=MS Access Database;" ( к примеру) то OutConnectString  после выполнения функции остаётся БЕЗ ИЗМЕНЕНИЯ! а сама функция вовращает SQL_NO_DATA. Если же InConnectString = "DSN=MS Access Database" то ошибка SQL_ERROR  с описанием "Data source not found and no default driver specified".
      Иными словами используя SQLDriverConnect я никак не могу узнать каких префиксов не хватило для подключения.

      Вот... буду юзеру просто выводить описание ошибки и давать возможность самому указывать какой InConnectString отправлять функции подключения.

      Кто с этим разбирался, да и просто народ помогите чем сможете!
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0227 ]   [ 16 queries used ]   [ Generated: 27.04.24, 17:43 GMT ]