Поддержка IB6
15 сентября наступило быстрее, чем хотелось бы. Мы реализовали много новых вещей и откорректировали немного старых. В настоящий момент провайдер поддерживает работу с IB4, IB5 и IB6. Все возможные типы InterBase, кроме массивов.
Мы благодарим всех пользователей, с которыми общались в течение прошедшего месяца. Некоторые новшества появились только благодаря вам. Особое спасибо Дмитрию Кузьменко, благодаря которому все это стало реальностью. Век помнить будем :)
Изменения в информационных свойствах источника данных
«gds32 version» — возвращает версию клиентской части IB.
«db_dialect» — это свойство появляется в доступном наборе только для клиентской части не ниже IB6. Указывает текущий диалект базы данных. Серверы 4x, 5x при запросе диалекта возвращают ошибку, которая интерпретируется как поддержка только 1 диалекта.
«Connection Status» — текущий статус подключения:
DBPROPVAL_CS_UNINITIALIZED (0) | Не инициализированное состояние |
DBPROPVAL_CS_INITIALIZED (1) | Источник инициализирован |
DBPROPVAL_CS_COMMUNICATIONFAILURE (2) | Потеря подключения |
Проверка подключения проводится с timeout'ом равным 5 секундам. Если за это время не удалось блокировать подключение для монопольного пользования (в многопоточной программе) , то считается что подключение нормальное.
«Server Name» — имя сервера, на котором расположена обслуживаемая база данных.
Исправлены и изменены свойства:
- «OLE DB Version» — теперь возвращает «02.00»
- «Data Source Object Threading» — в провайдере был неправильно указан численный идентификатор данного свойства.
Насчет правильности значения свойств «Prepare Commit Behavior» и «Prepare Abort Behavior» — сомнения остаются, поскольку подготовленный запрос остается действительным после выполнения commit и rollback. В тоже время MSDASQL говорит что это не так.
Свойства инициализации (подключения к базе данных)
«dialect» — требуемый диалект подключения клиента. Этот параметр доступен явно только для клиентских частей не ниже IB6. Но проверяется в любом случае (иначе он передается через расширенные свойства). Правила корректности значения таковы:
- Запрашиваемый диалект не выше диалекта базы данных. Если вы ничего не указали или указали 0, то диалект подключения устанавливается равным диалекту базы данных («db_dialect»).
- Диалект подключения не выше поддерживаемого провайдером для текущей клиентской части IB. В настоящий момент это третий диалект для IB6 и первый диалект для IB4, IB5.
Изменено поведение свойства «password«. Теперь вы можете получить его значение, если свойство «Persist Security Info» равно true. В противном случае будете получать «*********». Пользователи ADO Express могут поставить галочку у «Allow save password».
Для свойства инициализации «user id» определен псевдоним «user», который можно использовать в строке подключения.
Свойство «Prompt» имеет значение по умолчанию — не запрашивать пароль у пользователя. К месту сказать — у текущего провайдера MSSQL это свойство было совсем удалено.
Для всех свойств без исключения
Теперь правильно обрабатываются атрибуты на чтение и на запись свойств. Раньше можно было читать и изменять что угодно.
Источник подключений (Data Source)
Помимо поддержки новых свойств, эта компонента реализовывает новый интерфейс IPersistFile, позволяющий чтение/запись параметров инициализации из файла. Кроме того, провайдер регистрирует расширение файлов «ibp», благодаря чему пользователи ADO могут писать следующий код:
Dim cn as new ADODB.Connection cn.Open("file name=d:\database\cur_db.ibp")
ADO самостоятельно определит провайдер, заставит его прочитать указанный файл и инициализирует источник данных.
Для сохранения пароля в файле, вы должны установить свойство «Persist Security Info» равным true.
Глобальная блокировка на время подключения. Клиентская часть IB может зависать, если проводить параллельные подключения к базам данных. Поэтому в провайдер добавлен код, обеспечивающий последовательность подключений.