Ver Mensaje Individual
  #1  
Antiguo 19-12-2009
cocute cocute is offline
Miembro
 
Registrado: nov 2008
Posts: 403
Reputación: 16
cocute Va por buen camino
hay algun comando para duplicar una ficha de una tkbmemtable?

hay algun comando para duplicar una ficha de una Tkbmemtable?
con table1.insert añado
con table2.delete borro
existe algun comando tipo table1.duplicate para duplicar la ficha seleccionada
¿o tengo que hacerlo a mano?

he encontrado esta funcion pero no me funciona bien, no se porque me quedan campos sin copiar, uso delphi 2010.

Código PHP:
procedure DuplicateCurrentRecord(aDataSet TDataSet); 
var 
  
Data : array of variant
  
aRecord : array of TVarRec
  
integer
  
max integer
begin 
  max 
:= aDataSet.fields.count -1
  
// set the lenghth of the arecord array to be the same as the number of 
  // elements in the data array 
  
SetLength(arecord,max+1); 
  
SetLength(data,max+1); 

  
// set the variant type pointers to the data array 
  
for := 0 to max do 
  
begin 
    arecord
[i].VType := vtVariant
    
arecord[i].VVariant := @data[i]; 
  
end

  
// Copy the Record to the Array 
  
for := 0 to max do 
    
Data[i] := aDataSet.fields[i].value

  
// finally append the record in one go 
  
aDataSet.AppendRecord(aRecord); 
end
lo he pasado para que funcione con kbmemtable pero como digo no me duplica todos los campos de las fichas,
los demas los deja en blanco, es raro porque a veces me duplica los dos primeros, otras veces los tres primeros....

Código PHP:
procedure DuplicateCurrentRecord(aDataSet TkbmMemTable);

 var
  
Data : array of variant;
  
aRecord : array of TVarRec;
  
integer;
  
max integer;
begin
  max 
:= aDataSet.RecordCount -1;
  
// set the lenghth of the arecord array to be the same as the number of
  // elements in the data array
  
SetLength(arecord,max+1);
  
SetLength(data,max+1);

  
// set the variant type pointers to the data array
  
for := 0 to max do
  
begin
    arecord
[i].VType := vtVariant;
    
arecord[i].VVariant := @data[i];
  
end;

  
// Copy the Record to the Array
  
for := 0 to max do
    
Data[i] := aDataSet.fields[i].value;

  
// finally append the record in one go
  
aDataSet.AppendRecord(aRecord);
end

Última edición por cocute fecha: 19-12-2009 a las 12:27:32.
Responder Con Cita