Подключение таблиц Firebird к базе данных MS Access

Источник: mccinet

С выходом стабильной версии 1.0 Open Source ODBC драйвера от IBPhoenix появилась возможность свободно работать с базами данных сервера Firebird. Для этого достаточно лишь установить драйвер. Всю дальнейшую работу можно совершать непосредственно средствами MS Access.

Создать DSN с помощью MS Access VBA можно с помощью функции RegisterDatabase, специально предназначенной для регистрации нового источника данных:

DBEngine.RegisterDatabase <Имя источника данных>, _
                          <Название ODBC драйвера>, _
                          <Выводить или нет окно диалога драйвера ODBC>, _
                          <Список атрибутов>

Имя источника данных следует задавать с некоторой осторожностью, чтобы случайно не испортить какой-нибудь "чужой" DSN. Таким образом, если Вы захотите установить другие значения параметров соединения, процедуру RegisterDatabase нужно наоборот запустить повторно с тем же именем DSN и эти новые значения просто будут перезаписаны поверх старых.

Теперь немного подробнее о других параметрах. Название ODBC драйвера в нашем случае будет "Firebird/InterBase(r) driver". Список атрибутов - это пары параметр=значение, разделенные символами возврата каретки. Описываемый драйвер поддерживает следующие атрибуты соединения:

  • DRIVER: Всегда IscDbc.
  • DBNAME или DATABASE: Указывать обязательно. Местоположение базы данных (имя сервера и имя файла с полным путем либо псевдоним через двоеточие). Например:

    localhost:C:\DB\DataFile.fdb - локально
    127.0.0.1:C:\DB\DataFile.fdb - локально
    172.17.2.10:/usr/local/data/db.fdb - удаленно на *NIX
    192.168.10.20:D:\FIREBIRD\Data.fdb - удаленно на Windows
    192.168.10.20:MyAlias - удаленно (псевдоним)
    MYSERVER:MyAlias - удаленно (псевдоним)

  • CLIENT: Указывать обязательно. Имя файла клиентской библиотеки. Особенно актуально при использовании встраиваемой (embedded) версии сервера.
  • CHARSET или CHARACTERSET: Указывать желательно. Набор символов по умолчанию.
  • READONLY: По умолчанию (=0) подключается к базе данных для чтения/записи. Можно сделать только для чтения (=1).
  • NOWAIT: По умолчанию (=0), транзакция ждет снятия блокировки, если вдруг на неё наткнется. Можно сделать так, чтобы транзакция в такой ситуации сразу завершалась с ошибкой (=1).
  • DIALECT: Указывать обязательно. SQL-диалект базы данных сервера. 1-й диалект используется для совместимости с сервером InterBase 5-й версии. Для сервера Firebird более типичен 3-й диалект, хотя и там можно создавать базы данных в первом диалекте.
  • QUOTED: Эта опция гарантирует совместимость с базами данных, созданными в диалекте 1 (по умолчанию - включена).
  • SENSITIVE: Эта опция устанавливает свойство SQL_IDENTIFIER_CASE. Значение по умолчанию SQL_IC_UPPER. Можно также установить SQL_IC_SENSITIVE. По традиции, и в InterBase и в Firebird используются заглавные буквы.
  • AUTOQUOTED: Если установить, то драйвер будет пытаться самостоятельно заключать в кавычки идентификаторы, что черевато ошибками. Лучше не испытывать судьбу.
  • FILEDSN: При подключении к серверу, Access использует эти ключи в следующей последовательности: сначала используются атрибуты, указанные в строке подключения, затем отсутствующая информация извлекается из указанного FILEDSN или DSN.
  • SAVEDSN: Если этот параметр находится в строке подключения, то параметры успешного подключения, будут сохранены. Пароль сохраняется в зашифрованном виде.

Другие атрибуты (UID, PWD и ROLE) лучше указывать непосредственно в строке подключения, так как для них характерны частые изменения. В итоге, в качестве строки атрибутов может получиться, например, следующее:

DBNAME=localhost:C:\Work\FBTest.FDB
DRIVER=IscDbc
CLIENT=fbclient.dll
CHARSET=WIN1251
READONLY=0
NOWAIT=0
DIALECT=3
QUOTED=0

Дальше, надо подключить объекты базы данных сервера к Вашему приложению либо с помощью команды DoCmd.TransferDatabase с типом преобразования acLink, либо путем создания нового объекта TableDef:

Set NewTableDef = CurrentDB.CreateTableDef("Имя таблицы в БД MS Access")
NewTableDef.Connect = "Строка подключения"
NewTableDef.SourceTableName = "Имя таблицы или представления на сервере"
CurrentDB.TableDefs.Append NewTableDef

И в конце поможем Access'у определить первичный ключ, если он сам его не распознал, что является нормальным явлением при подключении представлений (VIEW):

CurrentDB.Execute "CREATE UNIQUE INDEX PrimaryKey ON " & _
                  "Имя таблицы в БД MS Access" & "(" & _
                  "Список полей первичного ключа" & ")"

Самое сложное здесь - составить строку подключения. В начале обязательно нужно указать "ODBC;", затем - имя созданного источника данных ("ODBC;DSN=<Имя источника данных>;..."), имя пользователя ("...;UID=<Логин>;...") и пароль ("...;PWD=<Пароль>;...") например:

"ODBC;DSN=Firebird Test;UID=SYSDBA;PWD=masterkey;"

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=7900