Archive for the ‘mc_dns’ Category
Как программно создать ODBC DSN
Настал такой момент, когда нужно обратиться к кому-нибудь серверу БД. MS Access предоставляет возможность создавать связанные ODBC таблицы (настоятельно рекомендую отказаться от их исопльзования) и запросы к серверу.
При использования запросов к серверу в качестве строки подключения предлогается указать имя DSN. Помимо имени DSN мастер вставляет дополнительные параметры, например, имя пользователя и пароль. Это очень плохо. И даже при этом ODBC подклчюение должно быть создано.
Я при использовании запросов к серверу в строку подключения писал только имя DSN, т.е. строка подключения выглядит следующим образом:
DSN=DEV_SERVER;
Что-бы избавить себя от необходимости помнить о необходимости создавать ODBC DSN написана библиотечная функция CM_CreateDSN(). Эта фукнция живет у меня в библиотечном модуле mc_dns. Параметры для подклчюения выбираются из настроек приложения при помощи функции CM_Param_Get().
Как правило функция CM_CreateDSN() выполняется каждый раз при старте. Это гарантирует, что дальше при работе приложения мы сможем получить доступ к данным.
Стоит отдельно обратить внимание на параметр настроек CnnOptionsOther. Именно тут задаются специфические параметры для подключения к серверу. В качестве параметра функции я его не выносил, т.к. необходимости не было. Как оказалось наиболее используемыми параметрыми оказались imUser и stPWD.
Также я думаю будут полезны пара сайтов, на которых можно найти примеры строк полключения к разным серверам:
- http://www.connectionstrings.com — лучший на мой взгляд.
- ADO Connection Strings
- ADO Connection String Samples
А вот собственно сама функция CM_CreateDSN():
Public Function CM_CreateDSN(Optional imDSN As String = "" _
, Optional imDriver As String = "" _
, Optional imDB As String = "" _
, Optional imServer As String = "" _
, Optional imUser As String = "" _
, Optional stPWD As String = "") As Boolean
' Скоков С.А. 2006-05-15
' изменена 2006-09-07 Скоков С.А.
' Создание DSN для подключения к базе данных
On Error GoTo Err_
Dim stCnnOptionsOther As String
Dim stAttributes As String
'-- читаем из настройки, если параметр не передан
If imDSN = "" Then imDSN = CM_Param_Get("DSN")
If imDriver = "" Then imDriver = CM_Param_Get("Driver")
If imDB = "" Then imDB = CM_Param_Get("DB")
If imServer = "" Then imServer = CM_Param_Get("Server")
If imUser = "" Then imUser = CM_Param_Get("User")
If stPWD = "" Then stPWD = CM_Param_Get("PWD")
stCnnOptionsOther = CM_Param_Get("CnnOptionsOther")
'-- формирование дополнительных атрибутов
If imDB <> "" Then stAttributes = stAttributes & "Database=" & imDB & ";"
If imServer <> "" Then stAttributes = stAttributes & "Server=" & imServer & ";"
If imUser <> "" Then stAttributes = stAttributes & "User=" & imUser & ";"
If stPWD <> "" Then stAttributes = stAttributes & "Password=" & stPWD & ";"
If stCnnOptionsOther <> "" Then stAttributes = stAttributes & stCnnOptionsOther
RegisterDatabase imDSN, imDriver, True, stAttributes
CM_CreateDSN = True
Exit_:
Exit Function
Err_:
Err.Raise Err.Number, "CM_CreateDSN()->" & Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
End Function