Проблема, с которой вы столкнулись, заключается в том, что если вы копируете таблицу указателей, указатели по-прежнему указывают на исходные объекты или записи, и поэтому любые манипуляции будут влиять на исходные данные.
Чтобы этого избежать, вам нужнокопировать оригинальные записи, а не указатели на них.Вы указываете (но на самом деле не утверждаете), что используете записи, а не объекты.Разница заключается в избавлении от вновь созданных объектов - для записей, которые вам не нужны, но для объектов, которые вы делаете.В вашем случае вы можете сделать массив постоянным для последующего повторного использования.
Для иллюстрации я добавил в форму 3 памятных поля.Два замечания - вам нужно как-то создать второй набор записей, и важный бит - CopyTable
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Unit3, Vcl.StdCtrls;
type
TRecord = record
Something : integer;
end;
TTable = array[0..7] of ^TRecord;
TForm2 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
procedure FormShow(Sender: TObject);
private
{ Private declarations }
Record0 : TRecord;
Record1 : TRecord;
Record2 : TRecord;
Record3 : TRecord;
Record4 : TRecord;
Record5 : TRecord;
Record6 : TRecord;
Record7 : TRecord;
TempRecord0 : TRecord;
TempRecord1 : TRecord;
TempRecord2 : TRecord;
TempRecord3 : TRecord;
TempRecord4 : TRecord;
TempRecord5 : TRecord;
TempRecord6 : TRecord;
TempRecord7 : TRecord;
fTempTable : TTable;
public
Table : TTable;
{ Public declarations }
procedure CopyTable;
procedure ShowTable( const ATable : TTable; const AMemo : TMemo );
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
{ TForm2 }
procedure TForm2.CopyTable;
var
i: Integer;
begin
for i := 0 to 7 do
fTempTable[i]^ := Table[ i ]^;
end;
procedure TForm2.FormShow(Sender: TObject);
var
i: Integer;
begin
// Set up tables
Table[0] := @Record0;
fTempTable[0] := @TempRecord0;
Table[1] := @Record1;
fTempTable[1] := @TempRecord1;
Table[2] := @Record2;
fTempTable[2] := @TempRecord2;
Table[3] := @Record3;
fTempTable[3] := @TempRecord3;
Table[4] := @Record4;
fTempTable[4] := @TempRecord4;
Table[5] := @Record5;
fTempTable[5] := @TempRecord5;
Table[6] := @Record6;
fTempTable[6] := @TempRecord6;
Table[7] := @Record7;
fTempTable[7] := @TempRecord7;
for i := 0 to 7 do
begin
Table[i]^.Something := i;
end;
ShowTable( Table, Memo1 );
CopyTable;
fTempTable[ 5 ].Something := 73;
ShowTable( fTempTable, Memo2 );
ShowTable( Table, Memo3 );
end;
procedure TForm2.ShowTable(const ATable: TTable; const AMemo: TMemo);
var
i: Integer;
begin
AMemo.Clear;
for i := 0 to 7 do
begin
AMemo.Lines.Add( IntToStr( ATable[i]^.Something));
end;
end;
end.