Автор: 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;
|
|