Duplicar registro
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!!
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
Curtidas 0
Respostas
Carlos Júnior
29/06/2010
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;
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;
GOSTEI 0
Douglas Fernandes
29/06/2010
Rodrigo...
Ou você pode fazer apenas chamar este procedimento duas vezes, fica ate mais facil de você mexer.
Ou você pode fazer apenas chamar este procedimento duas vezes, fica ate mais facil de você mexer.
GOSTEI 0
Marco Salles
29/06/2010
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
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!!
//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;
GOSTEI 0
Rodrigo Pereira
29/06/2010
Isso mesmo!!!
Vlw resolveu problema, obrigado a todos!!!!
Vlw resolveu problema, obrigado a todos!!!!
GOSTEI 0
Marco Salles
29/06/2010
então , favor colocar concluido no referido post
Obrigado
GOSTEI 0
Rodrigo Pereira
29/06/2010
Quando vou fazer isso, dá erro de página não encontrada!!!
GOSTEI 0
Marco Salles
29/06/2010
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
GOSTEI 0