Duplicar registro.

Firebird

23/06/2005

Olá

Tenho uma tabela master/detail (Pedido e itens do pedido) e tenho que criar uma opção para o usuário poder duplicar registros.
Tipo ele escolher o numero do pedido e clicar num botão. O programa irá duplicar o registro da tabela master e todos os itens da tabela detail do pedido selecionado. :?
Uso delphi7, firebird 1.5 e IBX.
Agradeço qualquer dica. :wink:


Ivonei

Ivonei

Curtidas 0

Respostas

Sremulador

Sremulador

23/06/2005

utilize um repeat tabela.eof ...


GOSTEI 0
Ivonei

Ivonei

23/06/2005

utilize um repeat tabela.eof ...


Não entendi.
Pode me dar um exemplo?


GOSTEI 0
Ivonei

Ivonei

23/06/2005

Fiz assim:

If MessageDlg(´Pedido com NF cancelada. Gerar novo pedido?´, mtConfirmation, [mbYES,mbNO], 0) = ID_YES Then
begin
Cancelado:=DMCadastro.Ped_CliNPCNST.AsInteger; //Guarda o num pedido cancelado na variavel;
DMCadastro.Ped_Cli.Close;
if not DmCadastro.Transacao.InTransaction then
DmCadastro.Transacao.StartTransaction;
//Copia o pedido e itens do pedido selecionado para a tabela TMPNST;
with DMPrint.IBTMPNST do
begin
Close;
SQL.Clear;
SQL.Add(´Insert Into TMPNST Select * from ESANST Where npcnst=:NovoPed´);
ParamByName(´NovoPed´).Value:=Cancelado;
Prepare;
ExecQuery;
end;
with DMPrint.IBTMPNSI do
begin
Close;
SQL.Clear;
SQL.Add(´Insert Into TMPNSI Select * from ESANSI Where npcnsi=:NovoItem´);
ParamByName(´NovoItem´).Value:=Cancelado;
Prepare;
ExecQuery;
end;
//Altera o numero do pedido para o atual e limpa alguns campos necessários;
with DMPrint.IBTMPNST do
begin
Close;
SQL.Clear;
SQL.Add(´Update TMPNST Set npcnst=gen_id(Ped_Cliente, 1), nnfnst=:num, dnfnst=:data1, ´);
SQL.Add(´datnst=:data2, numdup=:dupl, motcan=:canc´);
ParamByName(´NUM´).Value:=´´;
ParamByName(´DATA1´).Value:=´´;
ParamByName(´DATA2´).AsDateTime:= now;
ParamByName(´DUPL´).Value:=´´;
ParamByName(´CANC´).Value:=´´;
Prepare;
ExecQuery;
end;
//Copia o pedido e itens do pedido da tabela TMPNST e TMPNSI para ESANST e ESANSI;
with DMPrint.IBTMPNST do
begin
Close;
SQL.Clear;
SQL.Add(´Insert Into ESANST Select * from TMPNST´);
Prepare;
ExecQuery;
end;
with DMPrint.IBTMPNSI do
begin
Close;
SQL.Clear;
SQL.Add(´Insert Into ESANSI Select * from TMPNSI´);
Prepare;
ExecQuery;
end;
//Limpa as tabelas TMPNST e TMPNSI;
with DMPrint.IBTMPNST do
begin
Close;
SQL.Clear;
SQL.Add(´Delete from TMPNST´);
Prepare;
ExecQuery;
end;
DMCadastro.Transacao.Commit;
//Para abrir a pedido e os itens recem criados;
DMCadastro.IBQGen_Pedido.Open;
label9.Caption:= ´Último pedido cadastrado: ´+Inttostr(DMCADASTRO.IBQGen_PedidoGEN_ID.Value );
Edit1.Visible:=True;
Edit1.SetFocus;
Edit1.Text:=DMCadastro.IBQGen_PedidoGEN_ID.AsString;
DMCadastro.Ped_Cli_Item.Open;
DMCadastro.IBQGen_Pedido.Close;
end;

Se tem muita gambiarra eu não sei. A única coisa que sei (e importa), é que funiona. 8)


GOSTEI 0
POSTAR