Категория:Работа с файлами DBF dBASE IV

Материал из GEOS_WIKI
Перейти к: навигация, поиск

В системt K3 для работы с базами данных используется два подхода: исторически сложившийся – работа с файлами типа DBF dBASE IV и унифицированная работа с базами данных посредством интерфейса ADO. В этом разделе рассматривается работа с файлами типа DBF dBASE IV.

Файл формата DBF представляет собой таблицу, которая имеет столбцы (поля) и строки (записи). В каждой записи данные одного поля имеют одни и те же характеристики. К характеристикам поля можно отнести:

  • Имя поля. Строка до 10 символов. Может содержать только латинские буквы и цифры и начинаться с буквы. Используется для доступа к данным поля. При обращении к имени регистр букв игнорируется.
  • Тип поля. Описывает тип данных, которые хранятся в соответствующем поле записи. В DBF используется множество типов данных, но K3 может работать с полями 3-х типов: числовые, строковые и логические. Вы не сможете создать в K3 новую таблицу с полями других типов. Открыть существующую таблиц с полями других типов возможно, но выбрать или записать информацию можно только для полей указанных типов.
  • Длина поля. Определяет, сколько байт отводится в записи для хранения данных поля.
  • Точность хранения чисел. Определяет, сколько знаков хранится в дробной части числа.

В процессе работы с таблицей нужно учитывать, что в конкретной записи конкретное поле может и не содержать никакого значения (быть неопределенным).

Средства работы с таблицами DBF в системе K3 можно разделить на несколько смысловых групп:

  • Работа с наборами записей.
  • Экспорт в DBF атрибутов объектов сцены.
  • Использование таблиц констант.
  • Использование библиотек прототипов.

Обзор средств работы с наборами записей

В K3 имеется несколько команд и функций, предоставляющих наиболее общие возможности для работы с таблицами DBF. Использовать данные средства можно только в процессе выполнения макрокоманды. Вызов из окна диалога возможен при условии, что выход в диалог был выполнен макрокомандой.

Доступ к данным таблицы осуществляется через набор записей – некую логическую структуру, создаваемую в памяти K3. Набор записей можно либо открыть на основе существующего файла DBF (команда DbOpen), либо создать новый набор и новый файл таблицы (команда DbCreate).

Можно одновременно работать с несколькими наборами записей. При открытии или создании набора, ему присваивается уникальный идентификатор. Все остальные команды и функции используют этот идентификатор в качестве входного параметра. В описании всех команд – это параметр <id>.

Набор записей остается открытым до тех пор, пока его не закрыли с помощью команды DbClose. При завершении работы макрокоманд все открытые наборы так же автоматически закрываются.

Каждой записи таблицы соответствует запись набора, но не наоборот. Управлять отбором записей из таблицы в открываемый набор можно с помощью фильтра, задать который можно либо при открытии набора, либо с помощью команды DbFilter. Узнать количество записей, помещенных в набор, можно с помощью функции DbRecCount.

Для получения различной информации о полях открытого набора используются функции DbFldCount, DbFieldNum, DbFieldName, DbFieldType, DbFieldSize, DbFieldPrec.

Открытый набор записей может находиться в одном из нескольких состояний:

1. Режим текущей записи. В каждый конкретный момент для работы доступна только одна запись набора (текущая запись). Сразу после открытия набора текущей является первая запись. Для установки текущей записи используются команды перемещения по набору (DbMove, DbMoveFirst, DbMoveNext, DbMoveLast, DbMovePrevious), и команды поиска записи, удовлетворяющей определённым условиям (DbFindFirst, DbFindNext, DbFindLast, DbFindPrevious DbNomatch). С каждой записью набора связано некое уникальное числовое значение (закладка). Закладку текущей записи можно узнать с помощью функции DbBookmark. В дальнейшем её можно использовать для возврата к этой записи (DbMove). Получить значение поля текущей записи можно с помощью функции DbGetValue, при этом нужно учитывать, что значение может быть неопределено. Задать новое значение полю текущей записи можно с помощью команды DbSetValue. Эта команда вносит изменения только в буфер текущей записи, который хранится в оперативной памяти. Для сохранения изменений в файле таблицы используется команда DbUpdate. Если её не использовать, то при смене текущей записи все изменения будут потеряны.

2. Режим добавления новой записи. Перевести набор в этот режим можно с помощью команды DbAddNew.

3. Состояния BOF, EOF. Возможна ситуация, когда ни одна запись набора не является текущей. Это может быть при открытии пустого набора, или же, если в результате перемещений по набору, Вы встали перед первой записью или после последней записи набора. Узнать, не находится ли набор в таком состоянии, можно с помощью функций DbBOF, DbEOF.

Для удаления записи, как из набора, так и из таблицы, используется команда DbDelete.