Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.15;
Скачать: CL | DM;

Вниз

Как в Дельфи перекопировать все поля одной записи в другую?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
1-48051
V.Turecky
2002-08-04 08:40
2002.08.15
CreateProcess. Нужна информация.


1-48044
SPeller
2002-07-30 05:58
2002.08.15
WindowProc внутри объекта


4-48365
mev2000
2002-06-08 23:46
2002.08.15
Как в KOL организовать рекурсивный поиск фалов???


3-47941
goshavt
2002-07-25 15:27
2002.08.15
Есть ли компоненты для доступа к Oracle и MS SQL без BDE


3-48012
cooluser
2002-07-28 08:59
2002.08.15
Просмтор содержимого БД. TListView