Дата публикации: 30.08.2001

Поддержка IN-OUT параметров, массивов …

Общие изменения

1. Новое свойство инициализации free_threading. Введено для решения проблемы с проверкой подключения в диалоге «Data Links».

2. Обнаружилось изменение позиции курсора последовательного доступа в процессе обработки ошибок позиционирования через закладки.

3. new! Поддержка запроса «CREATE DATABASE …». Так как спецификация OLE DB не позволяет выполнение команд неинициализированного источника данных, этот запрос возможен только при непосредственном взаимодействии с провайдером.

4. new! Поддержка запроса «DROP DATABASE».

5. new! Полная поддержка IN-OUT параметров.

6. Обеспечена стабильность и предотвращена утечка ресурсов в случае сбоя выполнения запроса с параметрами.

7. Поддержка конвертации типа VT_CY (CURRENCY) в DBTYPE_I8 и DBTYPE_UI8.

8. Ошибка с нулевой колонкой закладок. Были перепутаны местами аргументы sizeof(LONG) и DBTYPE_I4, что интерпретировалось как DBTYPE_R4 и 3 байта. К краху это не приводило по причине требования спецификации выравнивать до размера, кратного разрядности процессора.

9. Устранены проблемы с чтением BLOB полей через ADO Express. Спасибо Юрису Гекишу, за подталкивание к решению этой проблемы и составление списка других ошибок в провайдере.

10. Оптимизирована проверка описаний параметров явно определенных пользователем (ADODB.Command.Parameters.Append). Её суть заключается в сортировке таблицы имен типов, поддерживаемых провайдером и использования бинарного поиска по ней.

Поддержка массивов

  • В OLE DB массивы представлены в виде SAFEARRAY. Это стандартный способ хранения массивов в Visual Basic.
  • IBProvider осуществляет автоматическую конвертацию элементов массивов в Visual Basic совместимые типы, поскольку SAFEARRAY не может хранить информацию о типах отличных от совместимых с VARIANT. За эту конвертацию отвечают новые свойства строки подключения и набора рядов — «array_vt_type«. Значение по умолчанию — true.

При передаче массивов в качестве IN параметров необходима информация о имени таблицы и колонки, в которую будет осуществлена вставка дескриптора массива. Функция IB API isc_dsql_describe_bind, возвращающая описание IN параметров запроса не возвращает указанные данные. Разработчики Firebird вроде как поняли смысл этой проблемы и, возможно, смогут её решить. Но для тех, кто эксплуатирует IB4/IB5 это ничего не даст. Поэтому был расширен способ представления параметров в тексте запроса, для возможности явного указания имени таблицы и колонки. А именно, теперь можно определять параметры вида:

  • ?
  • :param_name
  • ?.table_name.column_name
  • :param_name.table_name.column_name

Здесь table_name и column_name могут быть квотированными именами третьего диалекта. Вторая и третья часть параметра используются для внутренней работы и, в случае автоматической генерации списка параметров (ADODB.Command.Parameters.Refresh), наружу не выставляются.
Если дополнительная информация будет указана неверно, при выполнении «INSERT …», «UPDATE …» произойдет ошибка.

IBProvider разрешает запись подмножества элементов массива.

Следует иметь в виду, что при «UPDATE …» старые данные затираются.

Элементы массива с типом CHAR хранятся как обычно. То есть, с терминальными пробелами. IBProvider возвращает rtrim(элемент массива).

VARCHAR хранится как C-строка, то есть завершающаяся нулем. IBProvider исходит именно из такого принципа хранения и не использует другие спец. символы, типа ‘\n’ для обозначения завершения строки. Таким образом, в массивах нельзя хранить строки, содержащие нули.

InterBase не поддерживает использование массивов в качестве аргументов хранимых процедур.

В ADO Express открытие множества, содержащего массивы, приводит к AV. Причем до загрузки как таковой дело даже не доходит.


Дата публикации: 30.08.2001. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.