Fórum Duplicar registro #380296

29/06/2010

0

Boa tarde!!!
Existe uma forma de duplicar um registro, exemplo tenho um poupmenu, com a opção duplicar pedido, quando clico eu gerar um novo registro com os dados do cabeçalho, itens e financeiro?
Desde já agradeço!!

Rodrigo Pereira

Rodrigo Pereira

Responder

Posts

16/07/2010

Carlos Júnior

Caro amigo,

Use esse procedimento:

procedure DuplicaRegistroDataSet(
  dataSet: TCustomClientDataSet;
  recNo: integer;
  camposIgnorar: array of string);

  function IgnorarCampo(campo: string): boolean;
  var
    i: integer;
  begin
    Result := false;

    for i := 0 to Length(camposIgnorar) - 1 do
    begin
      if (camposIgnorar[i] = campo) then
      begin
         Result := true;
         Break;
      end;
    end;
  end;

var
  valores: Variant;
  i: integer;
  readOnly: boolean;
begin
  // Duplica o registro "recNo" de um dataset
  dataSet.RecNo := recNo;
  valores := VarArrayCreate([0, dataSet.FieldCount - 1],
                                            VarVariant);

  for i := 0 to (dataSet.FieldCount - 1) do
    valores[i] := dataSet.Fields[i].Value;

  dataSet.Append;
  for i := 0 to (dataSet.FieldCount - 1) do
  begin
    if (not(IgnorarCampo(dataSet.Fields[i].FieldName)))
    then
    begin
      readOnly := dataSet.Fields[i].ReadOnly;
      dataSet.Fields[i].ReadOnly := false;

      dataSet.Fields[i].Value := valores[i];

      dataSet.Fields[i].ReadOnly := readOnly;
    end;
  end;
end;

procedure TfrmCliente.acDuplicarExecute(Sender: TObject);
begin
  inherited;
  // Duplica as informações do registro atual
  TFuncoesClass.DuplicaRegistroDataSet(cdsClientes,
    cdsClientes.RecNo,
    ['CODIGO']);
end;
Responder

Gostei + 0

16/07/2010

Douglas Fernandes

Rodrigo...
Ou você pode fazer apenas chamar este procedimento duas  vezes, fica ate mais facil de você mexer.
Responder

Gostei + 0

19/07/2010

Marco Salles

Boa tarde!!!
Existe uma forma de duplicar um registro, exemplo tenho um poupmenu, com a opção duplicar pedido, quando clico eu gerar um novo registro com os dados do cabeçalho, itens e financeiro?
Desde já agradeço!!

. Vc pode tentar tb o método abaixo . < Duplica os valores que estão são apontados pelo SeuDataSet Atual ....Se quizer necessáriamente o Ultimo é so alterar um pouco a rotina abaixo  
//evento onclick do PopupMenu
procedure TSeuFormulario.DuplicarPedidoClick(Sender: TObject);
Type
TMyFields = Array of string;
TMyValue = Array of String;
var
MyFields:TMyFields;
MyValue:TMyValue;
I: Integer;
  begin
    try
      SetLength(MyFields,SeuDataSet.Fields.Count);
      SetLength(MyValue,SeuDataSet.Fields.Count);
    for I := 0 to SeuDataSet.Fields.Count - 1 do
     begin
      MyFields[i]:=SeuDataSet.Fields[i].DisplayName;
      MyValue[i]:=SeuDataSet.Fields[i].AsString;
     end;
     if SeuDataSet.State in [dsEdit,dsInsert] then
       exit
     else
       SeuDataSet.Insert;
     for I := 0 to SeuDataSet.fields.Count - 1 do
        SeuDataSet.FieldByName(MyFields[i]).AsString:=MyValue[i];
    SeuDataSet.Post;
    except
    //
    end;
end;
Responder

Gostei + 0

19/07/2010

Rodrigo Pereira

Isso mesmo!!!
Vlw resolveu problema, obrigado a todos!!!!
Responder

Gostei + 0

19/07/2010

Marco Salles

então , favor colocar concluido no referido post   Obrigado
Responder

Gostei + 0

20/07/2010

Rodrigo Pereira

Quando vou fazer isso, dá erro de página não encontrada!!!
Responder

Gostei + 0

20/07/2010

Marco Salles

Quando vou fazer isso, dá erro de página não encontrada!!!
enviei um email para a Daniella do DevMedia . Acredito que ela pode resolver isto Obrigago
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar