Как добавить копию текущей записи
Автор: Андрей Никитин
procedure AppendCurrent(Dataset:Tdataset);
var
aField: Variant ;
i: Integer ;
begin
// Создаём массив
aField := VarArrayCreate([0,DataSet.Fieldcount-1],VarVariant);
// считываем значения в массив
for i := 0 to (DataSet.Fieldcount-1) do
aField[i] := DataSet.fields[i].Value ;
DataSet.Append ;
// помещаем значения массива в новую запись
for i := 0 to (DataSet.Fieldcount-1) do
DataSet.fields[i].Value := aField[i] ;
end;
|
При использовании приведенного алгоритма не удается скопировать поля
типа BLOB. Можно просто вставить в 1-м и 2-м циклах проверку на тип
поля, например так:
procedure TMainForm.AppendCurrent(Dataset: Tdataset);
var
aField: Variant;
i: Integer;
begin
// Создаём массив
aField := VarArrayCreate([0, DataSet.Fieldcount - 1], VarVariant);
// считываем значения в массив
for i := 0 to (DataSet.Fieldcount - 1) do
if not DataSet.Fields[i].IsBlob {// <- Проверяем на BLOB} then
aField[i] := DataSet.fields[i].Value;
DataSet.Append;
// помещаем значения массива в новую запись
for i := 0 to (DataSet.Fieldcount - 1) do
if not DataSet.Fields[i].IsBlob {// <- Проверяем на BLOB} then
DataSet.fields[i].Value := aField[i];
end;
Этот способ хорош, когда поля типа BLOB не используются, или
информация, хранящаяся в них несущественна. Я, например, в BLOB
храню фотографии абонентов адресной книги.
|