Atualizar Tabela !!!!
Como posso pegar todos os dados de uma tabela A para uma outra Tabela B de uma so vez ...Tem como ? Lembrando q as duas tabelas tem os memos campos e atributos ....as tabelas sao em Paradox !!!!
Obrigado !!!!
Obrigado !!!!
Walter Faria
Curtidas 0
Respostas
Gandalf.nho
13/12/2004
Você pode usar o Database Desktop ou o Componente TBatchMove para fazer isso.
P. S. Da próxima vez, não exagere nos pontos de exclamação no título do seu tópico.
P. S. Da próxima vez, não exagere nos pontos de exclamação no título do seu tópico.
GOSTEI 0
Rômulo Barros
13/12/2004
P. S. Da próxima vez, não exagere nos pontos de exclamação no título do seu tópico.
:lol: :lol: :lol: :lol: :lol:
GOSTEI 0
Walter Faria
13/12/2004
Bom dia a todos do forum , ainda nao consegui resolver a minha questao . O problema q presciso fazer atualizacao desta tabela : Deixa eu explicar melhor :
Tenho tabela q se chama PECAS e uma outra q criei q esta no meu sistema ( PRODUTOS ). Esta TB PECAS o meu cliente pega do seu fornecedor toda a semana pq nela tem os precos atualizados. Entao seu utilizar da forma q postaram ( IDEIAS ) vai substituir tb os valores ta minha tabela PRODUTOS , como estoque e outras informaçoes , entao fiz um LOOP na tabela PECAS e fui fazendo uma atualizacao so dos campos q prescisavam, funcionou certinho so q o problema é q nesse LOOP eu tenho q verifica se o ITEM DA TB PECAS existe na TB PRODUTOS , caso exista so atualiza se nao eu insiro este novo ITEM.
Pra mim rodar esta operacao do LOOP demora +/- 2 horas. e nao é agradavel este tempo para o meu cliente ( Apesar de ter 29.000 registros na tabela PECAS )
codigo do LOOP
******
Var
Novo, Atualizado, Cont: Integer;
begin
try
FPrinc.Database1.StartTransaction;
Novo:= 0;
Atualizado:= 0;
Cont:= 0;
BtnLista.Enabled:= false;
BtnInicia.Enabled:= false;
QryKoga.First;
While not QryKoga.Eof do
begin
QryProduto.Close;
QryProduto.ParamByName(´Codigo´).AsString:= FloatToStr(QryKoga.fieldByName(´PRD_CodInt´).AsFloat);
QryProduto.ParamByName(´Custo´).AsFloat:= QryKoga.fieldByName(´PRD_Preco´).AsFloat;
QryProduto.ParamByName(´Anterior´).AsFloat:= QryKoga.fieldByName(´PRD_PrecoA´).AsFloat;
QryProduto.ParamByName(´Data´).AsDate:= Now;
QryProduto.ExecSQL;
Atualizado:= Atualizado + 1;
Cont:= Cont + 1;
if Cont = 1000 then
begin
FPrinc.Database1.Commit;
FPrinc.Database1.StartTransaction;
Cont:= 0;
end;
QryKoga.Next;
application.ProcessMessages;
end; /// fim do loop
FPrinc.Database1.StartTransaction;
FPrinc.Database1.Commit;
LblAtualizados.Caption:= ´Total de produtos atualizados : ´ + IntTostr(Atualizado);
BtnLista.Enabled:= true;
BtnInicia.Enabled:= true;
ShowMessage(´Base de dados foi atualiazado com êxito...´);
except
FPrinc.Database1.Rollback;
ShowMessage(´Erro na atualização...´);
end;
end;
*****
Bom se alguem tiver alguma sugestao fico muito grato mesmo !!!
Tenho tabela q se chama PECAS e uma outra q criei q esta no meu sistema ( PRODUTOS ). Esta TB PECAS o meu cliente pega do seu fornecedor toda a semana pq nela tem os precos atualizados. Entao seu utilizar da forma q postaram ( IDEIAS ) vai substituir tb os valores ta minha tabela PRODUTOS , como estoque e outras informaçoes , entao fiz um LOOP na tabela PECAS e fui fazendo uma atualizacao so dos campos q prescisavam, funcionou certinho so q o problema é q nesse LOOP eu tenho q verifica se o ITEM DA TB PECAS existe na TB PRODUTOS , caso exista so atualiza se nao eu insiro este novo ITEM.
Pra mim rodar esta operacao do LOOP demora +/- 2 horas. e nao é agradavel este tempo para o meu cliente ( Apesar de ter 29.000 registros na tabela PECAS )
codigo do LOOP
******
Var
Novo, Atualizado, Cont: Integer;
begin
try
FPrinc.Database1.StartTransaction;
Novo:= 0;
Atualizado:= 0;
Cont:= 0;
BtnLista.Enabled:= false;
BtnInicia.Enabled:= false;
QryKoga.First;
While not QryKoga.Eof do
begin
QryProduto.Close;
QryProduto.ParamByName(´Codigo´).AsString:= FloatToStr(QryKoga.fieldByName(´PRD_CodInt´).AsFloat);
QryProduto.ParamByName(´Custo´).AsFloat:= QryKoga.fieldByName(´PRD_Preco´).AsFloat;
QryProduto.ParamByName(´Anterior´).AsFloat:= QryKoga.fieldByName(´PRD_PrecoA´).AsFloat;
QryProduto.ParamByName(´Data´).AsDate:= Now;
QryProduto.ExecSQL;
Atualizado:= Atualizado + 1;
Cont:= Cont + 1;
if Cont = 1000 then
begin
FPrinc.Database1.Commit;
FPrinc.Database1.StartTransaction;
Cont:= 0;
end;
QryKoga.Next;
application.ProcessMessages;
end; /// fim do loop
FPrinc.Database1.StartTransaction;
FPrinc.Database1.Commit;
LblAtualizados.Caption:= ´Total de produtos atualizados : ´ + IntTostr(Atualizado);
BtnLista.Enabled:= true;
BtnInicia.Enabled:= true;
ShowMessage(´Base de dados foi atualiazado com êxito...´);
except
FPrinc.Database1.Rollback;
ShowMessage(´Erro na atualização...´);
end;
end;
*****
Bom se alguem tiver alguma sugestao fico muito grato mesmo !!!
GOSTEI 0
Walter Faria
13/12/2004
Bom dia a todos do forum , ainda nao consegui resolver a minha questao . O problema q presciso fazer atualizacao desta tabela : Deixa eu explicar melhor :
Tenho tabela q se chama PECAS e uma outra q criei q esta no meu sistema ( PRODUTOS ). Esta TB PECAS o meu cliente pega do seu fornecedor toda a semana pq nela tem os precos atualizados. Entao seu utilizar da forma q postaram ( IDEIAS ) vai substituir tb os valores ta minha tabela PRODUTOS , como estoque e outras informaçoes , entao fiz um LOOP na tabela PECAS e fui fazendo uma atualizacao so dos campos q prescisavam, funcionou certinho so q o problema é q nesse LOOP eu tenho q verifica se o ITEM DA TB PECAS existe na TB PRODUTOS , caso exista so atualiza se nao eu insiro este novo ITEM.
Pra mim rodar esta operacao do LOOP demora +/- 2 horas. e nao é agradavel este tempo para o meu cliente ( Apesar de ter 29.000 registros na tabela PECAS )
codigo do LOOP
******
Var
Novo, Atualizado, Cont: Integer;
begin
try
FPrinc.Database1.StartTransaction;
Novo:= 0;
Atualizado:= 0;
Cont:= 0;
BtnLista.Enabled:= false;
BtnInicia.Enabled:= false;
QryKoga.First;
While not QryKoga.Eof do
begin
QryProduto.Close;
QryProduto.ParamByName(´Codigo´).AsString:= FloatToStr(QryKoga.fieldByName(´PRD_CodInt´).AsFloat);
QryProduto.ParamByName(´Custo´).AsFloat:= QryKoga.fieldByName(´PRD_Preco´).AsFloat;
QryProduto.ParamByName(´Anterior´).AsFloat:= QryKoga.fieldByName(´PRD_PrecoA´).AsFloat;
QryProduto.ParamByName(´Data´).AsDate:= Now;
QryProduto.ExecSQL;
Atualizado:= Atualizado + 1;
Cont:= Cont + 1;
if Cont = 1000 then
begin
FPrinc.Database1.Commit;
FPrinc.Database1.StartTransaction;
Cont:= 0;
end;
QryKoga.Next;
application.ProcessMessages;
end; /// fim do loop
FPrinc.Database1.StartTransaction;
FPrinc.Database1.Commit;
LblAtualizados.Caption:= ´Total de produtos atualizados : ´ + IntTostr(Atualizado);
BtnLista.Enabled:= true;
BtnInicia.Enabled:= true;
ShowMessage(´Base de dados foi atualiazado com êxito...´);
except
FPrinc.Database1.Rollback;
ShowMessage(´Erro na atualização...´);
end;
end;
*****
Bom se alguem tiver alguma sugestao fico muito grato mesmo !!!
Tenho tabela q se chama PECAS e uma outra q criei q esta no meu sistema ( PRODUTOS ). Esta TB PECAS o meu cliente pega do seu fornecedor toda a semana pq nela tem os precos atualizados. Entao seu utilizar da forma q postaram ( IDEIAS ) vai substituir tb os valores ta minha tabela PRODUTOS , como estoque e outras informaçoes , entao fiz um LOOP na tabela PECAS e fui fazendo uma atualizacao so dos campos q prescisavam, funcionou certinho so q o problema é q nesse LOOP eu tenho q verifica se o ITEM DA TB PECAS existe na TB PRODUTOS , caso exista so atualiza se nao eu insiro este novo ITEM.
Pra mim rodar esta operacao do LOOP demora +/- 2 horas. e nao é agradavel este tempo para o meu cliente ( Apesar de ter 29.000 registros na tabela PECAS )
codigo do LOOP
******
Var
Novo, Atualizado, Cont: Integer;
begin
try
FPrinc.Database1.StartTransaction;
Novo:= 0;
Atualizado:= 0;
Cont:= 0;
BtnLista.Enabled:= false;
BtnInicia.Enabled:= false;
QryKoga.First;
While not QryKoga.Eof do
begin
QryProduto.Close;
QryProduto.ParamByName(´Codigo´).AsString:= FloatToStr(QryKoga.fieldByName(´PRD_CodInt´).AsFloat);
QryProduto.ParamByName(´Custo´).AsFloat:= QryKoga.fieldByName(´PRD_Preco´).AsFloat;
QryProduto.ParamByName(´Anterior´).AsFloat:= QryKoga.fieldByName(´PRD_PrecoA´).AsFloat;
QryProduto.ParamByName(´Data´).AsDate:= Now;
QryProduto.ExecSQL;
Atualizado:= Atualizado + 1;
Cont:= Cont + 1;
if Cont = 1000 then
begin
FPrinc.Database1.Commit;
FPrinc.Database1.StartTransaction;
Cont:= 0;
end;
QryKoga.Next;
application.ProcessMessages;
end; /// fim do loop
FPrinc.Database1.StartTransaction;
FPrinc.Database1.Commit;
LblAtualizados.Caption:= ´Total de produtos atualizados : ´ + IntTostr(Atualizado);
BtnLista.Enabled:= true;
BtnInicia.Enabled:= true;
ShowMessage(´Base de dados foi atualiazado com êxito...´);
except
FPrinc.Database1.Rollback;
ShowMessage(´Erro na atualização...´);
end;
end;
*****
Bom se alguem tiver alguma sugestao fico muito grato mesmo !!!
GOSTEI 0
Emerson Nascimento
13/12/2004
faça isso com instruções SQL. fica mais fácil.
GOSTEI 0
Walter Faria
13/12/2004
Emersom , desde ja te agradeço pela ajuda, vc me poderia me dizer como eu psso fazer isto via instrucao SQL ?
GOSTEI 0
Emerson Nascimento
13/12/2004
[b:9fe4495f83]atualização (faça esse primeiro):[/b:9fe4495f83]
[i:9fe4495f83]instrução para pegar somente os registros que devem ser atualizados.
altere as condições conforme a sua necessidade.[/i:9fe4495f83]
select Codigo
from PRODUTOS PRD, PECAS PC
where PRD.Codigo=PECAS.PRD_CodInt
    and (PRD.CustoPC.PRD_Preco or PRD.AnteriorPC.PRD_PrecoA)
[i:9fe4495f83]faça aquele loop de atualização baseando-se nos registros contidos na query acima[/i:9fe4495f83]
[b:9fe4495f83]inclusão:[/b:9fe4495f83]
[i:9fe4495f83]instrução para pegar somente os registros que não existem na tabela.
altere as condições conforme a sua necessidade.[/i:9fe4495f83]
insert into PRODUTOS (Codigo, Custo, Anterior)
    select PRD_CodInt, PRD_Preco, PRD_PrecoA
    from PECAS where PRD_CodInt not in (select Codigo from PRODUTOS)
[i:9fe4495f83]instrução para pegar somente os registros que devem ser atualizados.
altere as condições conforme a sua necessidade.[/i:9fe4495f83]
select Codigo
from PRODUTOS PRD, PECAS PC
where PRD.Codigo=PECAS.PRD_CodInt
    and (PRD.CustoPC.PRD_Preco or PRD.AnteriorPC.PRD_PrecoA)
[i:9fe4495f83]faça aquele loop de atualização baseando-se nos registros contidos na query acima[/i:9fe4495f83]
[b:9fe4495f83]inclusão:[/b:9fe4495f83]
[i:9fe4495f83]instrução para pegar somente os registros que não existem na tabela.
altere as condições conforme a sua necessidade.[/i:9fe4495f83]
insert into PRODUTOS (Codigo, Custo, Anterior)
    select PRD_CodInt, PRD_Preco, PRD_PrecoA
    from PECAS where PRD_CodInt not in (select Codigo from PRODUTOS)
GOSTEI 0
Walter Faria
13/12/2004
Emerson, bom dia !!!
Quero te agradecer mesmo, foi muito bom os comandos q vc me passou , a minha atualizacao ficou inseguinificante ao tempo q estava tendo para atualizar a minha tabela...!!! valeu cara.
Obrigado.
Quero te agradecer mesmo, foi muito bom os comandos q vc me passou , a minha atualizacao ficou inseguinificante ao tempo q estava tendo para atualizar a minha tabela...!!! valeu cara.
Obrigado.
GOSTEI 0