Помогите cкопировать запись

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Помогите cкопировать запись

Сообщение Sytin »

Хочу скопировать запись в таблице, например KatSopr, со всеми полями. Есть ли возможность как-нибудь сделать копию всей записи не присваивая все поля таблицы KatSopr при insert???
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

type tKatSopr = record as table KatSopr;
var
BufKatSopr : tKatSopr;

begin
BufKatSopr := tKatSopr ( KatSopr.buffer );
KatSopr.buffer := type$KatSopr ( BufKatSopr );
KatSopr.nrec := 0;
Insert Current KatSopr;
end

Как-то так
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

Спасибо огромное. Столько можно теперь времени экономить :grin:
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Я обычно просто позиционируюсь на запись.
Далее меняю что-то, что надо (какие-то поля).
Обнуляю нрек
Делаю insert
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Сообщение m0p3e »

Кстати вот описание из asdk

Код: Выделить всё

Работа с таблицами
Для работы с текущей записью таблицы можно использовать выражение вида: 

<имя таблицы>".buffer" 

(например, katos.buffer). Поле Buffer является полем структурного типа который имеет имя вида: "type$"<имя таблицы>. (например, type$katos). 

Buffer - фиктивное поле и не является полем физической таблицы. 

Благодаря полю buffer становится возможным присвоение текущей записи таблицы. 

При этом необходимо всегда явно задавать преобразование типа. 

Например, 

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); // правильно
  ...

Поля структуры, соответствующие полям, которые отсутствуют в текущей выборке, становятся невалидными. Если производится присвоение значения структуры текущей записи в таблице, то реально производится присвоение только тем полям таблицы, для которых соответствующие поля структуры валидны. 

Структуры могут передаваться в процедуры и функции как параметры. Передача структур возможна как по значению, так и по ссылке. Допустимо возвращать структуры как результат функции. Допустимо передавать структуры как параметры интерфейсов. 
Ответить