Динамический файловый драйвер (DFD) предоставляет разработчикам интерфейс для формирования файловых структур во время исполнения программы. Можно задавать структуру файлов для любых поддерживаемых файловых систем (ISAM или SQL) с помощью стандартного синтаксиса задания свойств. Если динамический файл создан с использованием SQL драйвера, то для автоматического определения структуры файла можно использовать PROP:SQL и исполнить либо опреатор SELECT, либо вызвать серверную хранимую процедуру, которая возвращает результирующий набор данных. Динамический файловый драйвер обладает мощной функциональностью, которая позволяет создавать файловые структуры во время выполнения программы. Разработаный класс DynFile упрощает задачу создания файловых структур. Класс инкапсулирует все необходимые для создания динамических файлов функции и испольльзование его методов сокращает требующийся для создания динамического файла код до нескольких строк. Вместе с шаблоном DynaFile Вы получите всю необходимую функциональность.
Вот несколько примеров использования DFD:
Динамическое создание структуры FILE которая соответствует результату любого SELECT оператора SQL или хранимой процедуры.
Динамическое создание структуры FILE для In-Memory драйвера для использования в качестве кэша данных для любого источника (ISAM или SQL).
Создание временных таблиц, которые соответствуют запросу пользователя.
Можно избавиться от жесткой привязки к словарю данных.
Создание и обработка таблиц, которые не описаны в словаре данных.
Изменение драйвера БД во время выполнения программы с помощью Prop:Driver.
Концептуальный пример использования динамических файлов
При работе с динамическими файлами нужно последовательно выполнить следующие действия:
1. Декларировать в секции данных ссылочные переменные:
3. Вызвать FIXFORMAT() для создания и инициализации динамической структуры.
FIXFORMAT(AFile)
затем вызвать CREATE(), OPEN() и выполнить DISPOSE() по окончании:
CREATE (AFile) OPEN(AFile) ! do cleanup processing DISPOSE (AFile)
Задание файла с помощью PROP:SQL
Если целевым драйвером является SQL драйвер, то для задания структуры FILE можно использовать PROP:SQL. По прежнему нужно будет использовать FIXFORMAT. Для получения необходимой структуры можно использовать либо опреатор SELECT, либо вызов хранимой процедуры, которая возвращает результирующий набор данных. Пример:
AFile &FILE CODE AFile &= NEW (FILE) AFile {PROP:Driver} = 'MSSQL' AFile {PROP:Owner} = 'Connection String' AFile {PROP:SQL} = 'SELECT * FROM MyTable' FIXFORMAT (AFile) UNFIXFORMAT (AFile) AFile {PROP:SQL} = 'CALL MyStoredProcedure(3)' FIXFORMAT (AFile) !Now the file will match the columns !returned by the stored procedure DISPOSE (AFile)
Знаете ли Вы, что абстракция через спецификацию - это прием программирования, позволяющий абстрагироваться от процесса вычислений описанных в теле процедуры, до уровня знания того, что данная процедура делает. Это достигается путем задания спецификации, описывающей эффект ее работы, после чего смысл обращения к данной процедуре становится ясным через анализ этой спецификации, а не самого тела процедуры. Мы пользуемся абстракцией через спецификацию всякий раз, когда связываем с процедурой некий комментарий, достаточно информативный для того, чтобы иметь возможность работать без анализа тела процедуры. Абстракция через спецификацию позволяет абстрагироваться от процесса вычислений описанных в теле процедуры, до уровня знания того, что данная процедура делает. Это достигается путем задания спецификации, описывающей эффект ее работы, после чего смысл обращения к данной процедуре становится ясным через анализ этой спецификации, а не самого тела процедуры. Мы пользуемся абстракцией через спецификацию всякий раз, когда связываем с процедурой некий комментарий, достаточно информативный для того, чтобы иметь возможность работать без анализа тела процедуры.