5 строк кода

Как писать приложения на MS Access

Как программно создать 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.

Также я думаю будут полезны пара сайтов, на которых можно найти примеры строк полключения к разным серверам:

  1. http://www.connectionstrings.com — лучший на мой взгляд.
  2. ADO Connection Strings
  3. 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

Written by Сергей Скоков

Август 31st, 2010 at 9:17 пп

Posted in mc_dns

Leave a Reply