Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rebotea

Duplicar registos de uma tabela

Mensagens Recomendadas

rebotea

boas

Amigos gostava de saber se alguem ja alguma vez duplicou em escada o registo mestre e relacionados , selacionado e respectivos registos  (varios das tabelas indexadas a tabela mestre) Ou seja tenho uma tabela onde tenho a tabela (Clientes)=>(tabela filho- LocaisClientes(x))=>(Tabela filho_sub -Trabalhosexecutados(y))...    Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Por duplicação queres dizer cópia e não criação de duplicados na mesma tabela, certo?

Se assim é, então sim. Mas isso não tem nada a ver com o Delphi.

Ainda para mais se é para fazer em escala, é trabalho para a base de dados.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
rebotea

Quero duplicar o registo actual ate ao registo na tabela mestre. o codigo abaixo funciona mas so para um registo mas eu necessito para varios em pelomenos 3 tabelas.

procedure DuplicaRegistroDataSet(

dataSet: TDataSet;

recNo: integer;

camposIgnorar: array of string );

function IgnorarCampo(campo: string): boolean;

var

i: integer;

j: integer;

begin

Result := false;

for i := 0 to Length(camposIgnorar) - 1 do

for j := 0 to Length(camposIgnorar) - 1 do

begin

if (camposIgnorar = campo) then

if (camposIgnorar[j] = campo) then

begin

Result := true;

Break;

end;

end;

end;

function IgnorarCampo1(campo: string): boolean;

var

i: integer;

l: integer;

begin

Result := false;

for i := 0 to Length(camposIgnorar) - 1 do

for l := 0 to Length(camposIgnorar) - 1 do

begin

if (camposIgnorar = campo) then

if (camposIgnorar[l] = campo) then

begin

Result := true;

Break;

end;

end;

end;

var

valores: Variant;

i: integer;

readOnly: boolean;

valores1: Variant;

j: integer;

readOnly1: boolean;

begin

// Duplica o registro "recNo" de um dataset

dataSet.RecNo := recNo;

//dataSet.RecNo := recNo1;

valores := VarArrayCreate([0, dataSet.FieldCount - 1],VarVariant);

for i := 0 to (dataSet.FieldCount - 1) do

valores := dataSet.Fields.Value;

dataSet.Append;

valores1 := VarArrayCreate([0, dataSet.FieldCount - 1],VarVariant);

for j := 0 to (dataSet.FieldCount - 1) do

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

dataSet.Append;

for i := 0 to (dataSet.FieldCount - 1) do

for j := 0 to (dataSet.FieldCount - 1) do

begin

if (not(IgnorarCampo(dataSet.Fields.FieldName)))

then

begin

readOnly := dataSet.Fields.ReadOnly;

readOnly1 := dataSet.Fields[j].ReadOnly;

dataSet.Fields.ReadOnly := false;

dataSet.Fields[j].ReadOnly := false;

dataSet.Fields.Value := valores;

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

dataSet.Fields.ReadOnly := readOnly;

dataSet.Fields[j].ReadOnly := readOnly;

end;

end;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
M6

Então só tens de aplicar esse procedimento aos registos que necessitas duplicar.

Não percebi muito bem o teu código, mas parece-me que te falta iterar os registos principais...


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.