Delphi World - Копирование записи в пределах одной и той же таблицы
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Копирование записи в пределах одной и той же таблицы

Автор: OAmiry (Borland)

"Каким образом мне копировать запись в пределах одного и того же TTable? То есть, если я вижу текущую запись на экране и хочу ее скопировать в ту же таблицу с изменением индекса поля(ей), то какие действия мне необходимо предпринять?"

Необходимы два TTable, связанные с одной таблицей. Когда Table1 позиционируется в копируемой строке, с помощью Table2 вы можете выполнить операцию добавления записи. Пример: {только для демонстрации идеи, пример может быть нерабочим}


procedure TForm1.Button1Click(Sender: TObject);
var
  i: Cardinal;
  srcStream: TBlobStream;
begin
  try
    with Table1 do
    begin
      CheckBrowseMode;
      if EOF or BOF then
        raise Exception.Create('Разместите курсор на правильной строке');
    end;
    with Table2 do
    begin
      Append;
      for i := 0 to Table1.FieldCount - 1 do
        if Table1.Fields[i].DataType < ftBytes then
          FieldByName(Table1.Fields[i].FieldName).Assign(Table1.Fields[i])
        else
        try
          srcStream := nil;
          srcStream := TBlobStream.Create(TBlobField(Table1.Fields[i]), bmRead);
          TBlobField(FieldByName(Table1.Fields[i].FieldName)).LoadFromStream(srcStream);
        finally
          if Assigned(srcStream) then
            srcStream.Free;
        end;
      Post;
    end;
  except
    on E: EDBEngineError do
      MessageDlg(E.Message, mtError, [mbOk], 0);
    on E: Exception do
      MessageDlg(E.Message, mtError, [mbOk], 0);
  end;
end;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования