Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.65.134] |
|
Сообщ.
#1
,
|
|
|
Всем известно, что 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 отправлять функции подключения. Кто с этим разбирался, да и просто народ помогите чем сможете! |