Работа с таблицами |
Для работы с текущей записью таблицы можно использовать выражение вида:
<имя-таблицы>.buffer
Например: katos.buffer.
Поле buffer является полем структурного типа, который имеет имя вида: "type$"<имя таблицы>. Например, type$katos.
Для получения записи таблицы с полем позиции (см. "Позиции. ") необходимо использовать выражение вида:
<имя-таблицы>.bufferp
Например: baseDoc.bufferp.
Поле bufferp является полем структурного типа, который имеет вид type$p_<имя-таблицы>. Например, type$p_baseDoc.
Buffer - фиктивное поле и не является полем физической таблицы.
Благодаря полю buffer становится возможным присвоение текущей записи таблицы. При этом необходимо всегда явно задавать преобразование типа.
Начиная с Атлантис версии 5.1.09 типы "type$<таблица>" и "record as table <таблица>", а также "type$p_<таблица>" и "record as table <таблица> with x$position" являются синонимами. Необходимость в дополнительном приведении типа снимается и оптимизируется компилятором.
Например:
type TMyTable = record as table mytable; var table1 : TMyTable; ... mytable.buffer := mykatos; // ошибка mytable.buffer := type$mytable(mykatos); // правильно insert current mytable; ...
также возможна обратная операция получения текущей записи таблицы. Например,
type TMyTable = record as table mytable; var table1 : TMyTable; ... table1 := mytable.buffer; // ошибка table1 := TMyTable(mytable.buffer); // правильно ...
Запись с полем позиции:
type TRecPosBaseDoc = record as table baseDoc with x$position; var myBaseDocRec : TRecPosBaseDoc; ... baseDoc.bufferp := type$p_BaseDoc(myBaseDocRec);
Поля структуры, соответствующие полям, которые отсутствуют в текущей выборке, становятся невалидными. Если производится присвоение значения структуры текущей записи в таблице, то реально производится присвоение только тем полям таблицы, для которых соответствующие поля структуры валидны.
Структуры могут передаваться в процедуры и функции как параметры. Передача структур возможна как по значению, так и по ссылке. Допустимо возвращать структуры как результат функции. Допустимо передавать структуры как параметры интерфейсов.