Форум: "Базы";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
ВнизКак в Дельфи перекопировать все поля одной записи в другую? Найти похожие ветки
← →
Gamar (2002-07-25 12:44) [0]Как в Дельфи перекопировать все поля одной записи в другую?
← →
asdf (2002-07-25 12:46) [1]Операторами SQL ...
← →
Gamar (2002-07-25 12:55) [2]Не поскажешь, как именно. Плиз!..
← →
Viewer (2002-07-25 13:00) [3]При чем тут Дельфи ?
"Скажи кто твой друг"
База какая ?
Или речь о record идет ?
← →
SuperVK (2002-07-25 14:05) [4]2 Garmar:
Здесь в форуме мне советовали следующий вариант:
--------------------------------------------------------
var
s: string;
...
SetLength(s, Table.RecordSize);
StrLCopy(PChar(s), Table.ActiveBuffer, Table.RecordSize);
Table.Append;
StrLCopy(Table.ActiveBuffer, PChar(s), Table.RecordSize);
Table.Fields[0].Value := new_number;
Table.Post;
-----------(с) VedMed-----------------------------------
но он у меня отказался работать (копировал почему-то всего два первых поля). Может у тебя заработает.
Есть ещё вариант. Я же (после того, как не смог заставить работать вышеописанную функцию) написал примерно следующую функцию, которая у меня теперь этим (копированием) занимается. Сделано дубово, но зато работает и достаточно универсально:
//--------------------------------------------------------
//src_nmb - номер строки из которой надо копировать
//new_nmb - номер строки куда копировать
//table - таблица, строки которой надо скопировать
procedure TdmPers.CopyPersRecord(new_nmb: integer; src_nmb : integer; table : TFTable);
var
i, j : SmallInt;
var_val : array [0..31] of Variant;
begin
table.RecNo := src_nmb;
for i:=0 to table.FieldCount-1 do
if( table.Fields[i].FieldKind = fkData) then
var_val[i] := table.Fields[i].Value;
table.RecNo := new_nmb; //или table.insert()
table.Edit();
for i:=0 to table.FieldCount-1 do
if( table.Fields[i].FieldKind = fkData) then
table.Fields[i].Value := var_val[i];
table.Append();
end;
//---------------------------------------------------------------
PS: Я её немного изменил, так как в моя (исходная) функция копирует несколько строк из связной таблицы, так что может где-то косячёк какой, но в целом должно быть понятно.
А если надо просто вставить копию строки и не надо вообще никаких наворотов, то можно и вообще так:
Table.AppendRecord([
new_number
Table.Fields[1].Value,
Table.Fields[2].Value,
Table.Fields[3].Value,
Table.Fields[4].Value,
Table.Fields[5].Value,
...
Table.Fields[n].Value
]);
Table.Post();
← →
Lord Warlock (2002-07-25 14:10) [5]
> SuperVK © (25.07.02 14:05)
Кстати в последнем варианте Post делать не нужно
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.08.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c