Zurdo Soft es:
Jorge E. Ferreyra
Periodistas Argentinos 234 - (5900)Villa María
Tel.: 0353 453 8034 - 0353 155 66 7350
Córdoba - Argentina

Duplicar Un Record

¿Cómo duplicar un registro en un DataSet?

Probablemente desea duplicar un registro y cambiar los valores de alguno de los campos, antes de agregarlo.
El problema es que al usar dataset.append, dataset.PonerValoresDeLosCampos, dataset.post se pierde el registro actual que desea duplicar.
Podria usar dos dataset y copiar uno al otro, pero usa memoria extra.
O podría copiar al contenido actual a un almacenamiento temporario y luego llamar Append.
Tomando la segunda opción podemos usar VarArrayCreate pero es lenta.
Simplemente hay que copiar el registro actual en un Array de Variant y luego usar el método dataset.AppendRecord.

procedure DuplicateCurrentRecord(aDataSet : TDataSet);
var
  Data : array of variant;
  aRecord : array of TVarRec;
  i : integer;
  max : integer;
begin
  max := aDataSet.fields.count -1;
  // Pone la longitud de aRecord al mismo numero que Data 
  SetLength(aRecord,max+1);
  SetLength(Data,max+1); 
  // Pone punteros tipo variant en Data 
  for i := 0 to max do
  begin
    aRecord[i].VType := vtVariant;
    aRecord[i].VVariant := @Data[i];
  end
  // Copia el registro al Array
  for i := 0 to max do
    Data[i] := aDataSet.fields[i].value; 
  // finalmente agrega el registro 
  aDataSet.AppendRecord(aRecord);
end;

Luego dataset.Post.
Este modo puede ser correcto, no lo probé, el siguiente hace lo mismo y funciona bien.

var
  FieldNames: string
  i: integer;
  FieldValues: Variant;
begin
  for i:=0 to Table1.FieldCount-1 do
    if i<>0 then
      FieldNames:=FieldNames+';'+Table1.Fields[i].FieldName
    else
      FieldNames:=Table1.Fields[i].FieldName;
  FieldValues:=Table1[FieldNames];
  Table1.Append;
  Table1[FieldNames]:=FieldValues;
  Table1.Post;
end;

Antes del Post es conveniente "tocar" los campos que desea modificar en el nuevo registro, como puede ser el número de cliente o el precio.

Tomado de delphi3000

Inicio [Internet] [Electrónica] [Programacion]

www.000webhost.com