Fórum Atualizar Tabela !!!! #261748
13/12/2004
0
Obrigado !!!!
Walter Faria
Curtir tópico
+ 0Posts
13/12/2004
Gandalf.nho
P. S. Da próxima vez, não exagere nos pontos de exclamação no título do seu tópico.
Gostei + 0
13/12/2004
Rômulo Barros
:lol: :lol: :lol: :lol: :lol:
Gostei + 0
19/01/2005
Walter Faria
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
19/01/2005
Walter Faria
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
19/01/2005
Emerson Nascimento
Gostei + 0
19/01/2005
Walter Faria
Gostei + 0
19/01/2005
Emerson Nascimento
[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
20/01/2005
Walter Faria
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
Clique aqui para fazer login e interagir na Comunidade :)