Копирование записи из одной таблицы в другую не работает

Я использую BDE и плоские столы. У меня есть две идентичные таблицы, tblOne а также tblTwoЯ пытаюсь скопировать данные из одной таблицы в другую. Не вся БД, только одна конкретная запись, использующая это:

function Tdm.CopyRecord(var tblFrom,tblTo : TTable) : Boolean;
var
  i : Integer;
begin
  Result:=False;
  try
    tblTo.Insert;
    for i:=1 to tblFrom.FieldCount-1 do
    begin
      if tblFrom.Fields[i].FieldName = tblTo.Fields[i].FieldName then
        tblTo.Fields[i].Value:=tblFrom.Fields[i].Value;
    end;
    tblTo.Post;
    Result:=True;
  finally
  end;
end;

if CopyRecord(tblOne,tblTwo) then...

Для этого все значения являются "нулевыми" для таблицы "Из таблицы".

После публикации я получаю пустую запись в tblTo, Не удивительно, что все ценности нулевые.:)

Где я ошибаюсь при копировании данных? Это не делает его в функцию копирования.

Я был в этом в течение нескольких часов и не могу заставить его работать. Наверное, что-то простое я пропускаю. Я добавил параметр "var", чтобы увидеть, если это имеет какое-то значение, но это не так.

Кстати, я начинаю цикл с "1", а не с "0", так как первое поле в обоих файлах AutoInc,

1 ответ

Решение

Вот как я бы это сделал:

function CopyRecord(tblFrom, tblTo: TTable; const StartIndex: Integer=0): Boolean;
var
  i: Integer;
  FieldFrom, FieldTo: TField;
begin
  Result := False;
  for i := StartIndex to tblFrom.FieldCount - 1 do
  begin
    FieldFrom := tblFrom.Fields[i];
    FieldTo := tblTo.FindField(FieldFrom.FieldName);
    if Assigned(FieldTo) then
    begin
      FieldTo.Value := FieldFrom.Value;
      Result := True;
    end;
  end;
end;

Я бы не использовал tblTo.Insert/tblTo.Post внутри CopyRecord метод. но лучше использовать его снаружи, например:

tblTwo.Append;
if CopyRecord(tblOne, tblTwo, 1) then
  tblTwo.Post
else
  tblTwo.Cancel;

Это может быть повторно использовано также в Edit Режим.

Другие вопросы по тегам