Re: [delphi-br] Demora para atualizar banco de dados mysql

2006-06-28 Por tôpico Daniel Bastos
Reparei que na sua rotina vc usa table...
talves a lentidão não seja na hora de gravar e sim na hora de ler o conteudo
da table... Já ví isso acontecer quando um outro projeto (que não era o meu)
lia uma quantidade grande de registros localizados em um .dbf em uma máquina
remota...

não sei como está o seu projeto... é só uma sugestão... tomara que ajude

abraço


Em 26/06/06, Francisco Carlos de Andrade [EMAIL PROTECTED]
escreveu:

  Ola pessoal, estou aqui com um problema serio, tenho 1 arquivo que sempre
 esta sendo atualizado com inclusoes e ou alteracoes de dados, acontece que
 qdo vou atualizar uma determinada quantidade de registros ele demora
 muito,
 exemplo digamos que eu tenha que atualizar 2000 registro fazendo a rotina
 de
 ver se cada registro ja esta inserido no arquivo caso esteja eu atualizo o
 registro e caso nao eu insiro o novo registro, com essa qtde de registro a
 serem verificadas esta demorando aproximadamente 2 horas  e meia.
 Minha rotina :
   Table1.First;
   While not Table1.Eof do begin
Application.ProcessMessages;
If tmpvenda.Active = True then tmpvenda.Active := False;
Tmpvenda.Sql.Clear;
Tmpvenda.Sql.Add('select dataemis,registro,cgce,modelo,especie,serie
 numero,aliquota,cnpjempresa from ntfvenda where ');
Tmpvenda.Sql.Add('(Cgce='+Edit5.Text+') and (Modelo='+Table1MODELO
 Text+') ');
Tmpvenda.Sql.Add('and (Especie='+Table1ESPECIE.Text+') and (Serie=
 +Table1SERIE.Text+') ');
Tmpvenda.Sql.Add('and (Numero='+Table1NUMERO.Text+') and (Aliquota=
 +Table1ALIQUOTA.Text+') ');
Tmpvenda.Active := True;
If tmpvenda.RecordCount = 0 then begin
 LSaida := 'insert into ntfvenda (Modelo,Cgce,CnpjEmpresa';
 If length(Table1NO_MAQUINA.Text)  0 then LSaida :=
 LSaida+',No_Maquina'

 If length(Table1ESPECIE.Text) 0 then LSaida := LSaida+',Especie';

// faco a comparacao dos campos

 LSaida := LSaida+') values ('+Table1MODELO.Text+','+Edit5.text+',
 +Copy(Edit5.Text,1,8)+Copy(Edit5.Text,10,4)+Copy(Edit5.Text,15,2)+'';

 if length(Table1NO_MAQUINA.Text)  0 then LSaida := LSaida+',
 +Table1NO_MAQUINA.Text+'';
 if length(Table1ESPECIE.Text) 0 then LSaida := LSaida+',
 +Table1ESPECIE.Text+'';

 LSaida := LSaida+')';
 if Zntfvenda.Active = True then Zntfvenda.Active := False;
 Zntfvenda.Sql.Clear;
 Zntfvenda.Sql.Add(LSaida);
 if length(Table1DATAEMIS.Text)0 then Zntfvenda.ParamByName('d1')
 AsDateTime := Table1DATAEMIS.AsDateTime;
 if length(Table1VRCTB.Text)   0 then Zntfvenda.ParamByName('v1')
 AsFloat := Table1VRCTB.Value;

// comparacao dos campos para parametros
 Zntfvenda.ExecSql;
end
else begin
 MId := tmpvendaRegistro.Text;
 if tmpVendaDataEmis.Text = Table1DataEmis.Text then begin
  LSaida := 'Update ntfvenda set
 No_Maquina='+Table1NO_MAQUINA.Text+'
 Especie='+Table1Especie.Text+',Serie='+Table1SERIE.Text;

 LSaida:=LSaida+',Numero='+Table1NUMERO.Text+',DataEmis=:d1,Uf_Dest=
 +Table1UF_DEST.Text+',Codctb='+Table1CODCTB.Text;
  LSaida:=LSaida+',CodFiscn='+Table1CODFISCN.Text+',VrCtb=:v1
 BaseCalc=:v2,Aliquota=:v3,ImpDeb=:v4,Isentas=:v5,Outras=:v6,';
  Zntfvenda.ExecSql;
 // mesma comparacao mas dessa vez serve para o update
 end;
end;
Table1.Next;
   end;


 Alguem poderia me dar uma ideia de como fazer isso + rapido

 -
 Francisco Carlos de Andrade
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]

 [As partes desta mensagem que não continham texto foram removidas]




 



[As partes desta mensagem que não continham texto foram removidas]



-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 





Re: [delphi-br] Demora para atualizar banco de dados mysql

2006-06-28 Por tôpico Moacir - Prisma
Francisco,

Elimine o teste para ver se existe o registro, por exemplo:

Try
 starttransaction
 //-- Tenta Alterar
 // Aqui vai a rotina de alteração
 If query1.RowsAffected=0 then
 begin
//- Não existe, Faz a inserção
//-- aqui a rotina de inserção
 end;
  commit
except
  rollback;
end;

[ ]´s
Moacir


Daniel Bastos escreveu:
 Reparei que na sua rotina vc usa table...
 talves a lentidão não seja na hora de gravar e sim na hora de ler o conteudo
 da table... Já ví isso acontecer quando um outro projeto (que não era o meu)
 lia uma quantidade grande de registros localizados em um .dbf em uma máquina
 remota...
 
 não sei como está o seu projeto... é só uma sugestão... tomara que ajude
 
 abraço
 
 
 Em 26/06/06, Francisco Carlos de Andrade [EMAIL PROTECTED]
 escreveu:
  Ola pessoal, estou aqui com um problema serio, tenho 1 arquivo que sempre
 esta sendo atualizado com inclusoes e ou alteracoes de dados, acontece que
 qdo vou atualizar uma determinada quantidade de registros ele demora
 muito,
 exemplo digamos que eu tenha que atualizar 2000 registro fazendo a rotina
 de
 ver se cada registro ja esta inserido no arquivo caso esteja eu atualizo o
 registro e caso nao eu insiro o novo registro, com essa qtde de registro a
 serem verificadas esta demorando aproximadamente 2 horas  e meia.
 Minha rotina :
   Table1.First;
   While not Table1.Eof do begin
Application.ProcessMessages;
If tmpvenda.Active = True then tmpvenda.Active := False;
Tmpvenda.Sql.Clear;
Tmpvenda.Sql.Add('select dataemis,registro,cgce,modelo,especie,serie
 numero,aliquota,cnpjempresa from ntfvenda where ');
Tmpvenda.Sql.Add('(Cgce='+Edit5.Text+') and (Modelo='+Table1MODELO
 Text+') ');
Tmpvenda.Sql.Add('and (Especie='+Table1ESPECIE.Text+') and (Serie=
 +Table1SERIE.Text+') ');
Tmpvenda.Sql.Add('and (Numero='+Table1NUMERO.Text+') and (Aliquota=
 +Table1ALIQUOTA.Text+') ');
Tmpvenda.Active := True;
If tmpvenda.RecordCount = 0 then begin
 LSaida := 'insert into ntfvenda (Modelo,Cgce,CnpjEmpresa';
 If length(Table1NO_MAQUINA.Text)  0 then LSaida :=
 LSaida+',No_Maquina'

 If length(Table1ESPECIE.Text) 0 then LSaida := LSaida+',Especie';

// faco a comparacao dos campos

 LSaida := LSaida+') values ('+Table1MODELO.Text+','+Edit5.text+',
 +Copy(Edit5.Text,1,8)+Copy(Edit5.Text,10,4)+Copy(Edit5.Text,15,2)+'';

 if length(Table1NO_MAQUINA.Text)  0 then LSaida := LSaida+',
 +Table1NO_MAQUINA.Text+'';
 if length(Table1ESPECIE.Text) 0 then LSaida := LSaida+',
 +Table1ESPECIE.Text+'';

 LSaida := LSaida+')';
 if Zntfvenda.Active = True then Zntfvenda.Active := False;
 Zntfvenda.Sql.Clear;
 Zntfvenda.Sql.Add(LSaida);
 if length(Table1DATAEMIS.Text)0 then Zntfvenda.ParamByName('d1')
 AsDateTime := Table1DATAEMIS.AsDateTime;
 if length(Table1VRCTB.Text)   0 then Zntfvenda.ParamByName('v1')
 AsFloat := Table1VRCTB.Value;

// comparacao dos campos para parametros
 Zntfvenda.ExecSql;
end
else begin
 MId := tmpvendaRegistro.Text;
 if tmpVendaDataEmis.Text = Table1DataEmis.Text then begin
  LSaida := 'Update ntfvenda set
 No_Maquina='+Table1NO_MAQUINA.Text+'
 Especie='+Table1Especie.Text+',Serie='+Table1SERIE.Text;

 LSaida:=LSaida+',Numero='+Table1NUMERO.Text+',DataEmis=:d1,Uf_Dest=
 +Table1UF_DEST.Text+',Codctb='+Table1CODCTB.Text;
  LSaida:=LSaida+',CodFiscn='+Table1CODFISCN.Text+',VrCtb=:v1
 BaseCalc=:v2,Aliquota=:v3,ImpDeb=:v4,Isentas=:v5,Outras=:v6,';
  Zntfvenda.ExecSql;
 // mesma comparacao mas dessa vez serve para o update
 end;
end;
Table1.Next;
   end;


 Alguem poderia me dar uma ideia de como fazer isso + rapido

 -
 Francisco Carlos de Andrade
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]
 [EMAIL PROTECTED]

 [As partes desta mensagem que não continham texto foram removidas]






 
 
 [As partes desta mensagem que não continham texto foram removidas]
 
 
 


-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html

 





[delphi-br] Demora para atualizar banco de dados mysql

2006-06-26 Por tôpico Francisco Carlos de Andrade
Ola pessoal, estou aqui com um problema serio, tenho 1 arquivo que sempre
esta sendo atualizado com inclusoes e ou alteracoes de dados, acontece que
qdo vou atualizar uma determinada quantidade de registros ele demora muito,
exemplo digamos que eu tenha que atualizar 2000 registro fazendo a rotina de
ver se cada registro ja esta inserido no arquivo caso esteja eu atualizo o
registro e caso nao eu insiro o novo registro, com essa qtde de registro a
serem verificadas esta demorando aproximadamente 2 horas  e meia.
Minha rotina :
  Table1.First;
  While not Table1.Eof do begin
   Application.ProcessMessages;
   If tmpvenda.Active = True then tmpvenda.Active := False;
   Tmpvenda.Sql.Clear;
   Tmpvenda.Sql.Add('select dataemis,registro,cgce,modelo,especie,serie
numero,aliquota,cnpjempresa from ntfvenda where ');
   Tmpvenda.Sql.Add('(Cgce='+Edit5.Text+') and (Modelo='+Table1MODELO
Text+') ');
   Tmpvenda.Sql.Add('and (Especie='+Table1ESPECIE.Text+') and (Serie=
+Table1SERIE.Text+') ');
   Tmpvenda.Sql.Add('and (Numero='+Table1NUMERO.Text+') and (Aliquota=
+Table1ALIQUOTA.Text+') ');
   Tmpvenda.Active := True;
   If tmpvenda.RecordCount = 0 then begin
LSaida := 'insert into ntfvenda (Modelo,Cgce,CnpjEmpresa';
If length(Table1NO_MAQUINA.Text)  0 then LSaida := LSaida+',No_Maquina'

If length(Table1ESPECIE.Text) 0 then LSaida := LSaida+',Especie';
   // faco a comparacao dos campos 
 
LSaida := LSaida+') values ('+Table1MODELO.Text+','+Edit5.text+',
+Copy(Edit5.Text,1,8)+Copy(Edit5.Text,10,4)+Copy(Edit5.Text,15,2)+'';
 
if length(Table1NO_MAQUINA.Text)  0 then LSaida := LSaida+',
+Table1NO_MAQUINA.Text+'';
if length(Table1ESPECIE.Text) 0 then LSaida := LSaida+',
+Table1ESPECIE.Text+'';
  
LSaida := LSaida+')';
if Zntfvenda.Active = True then Zntfvenda.Active := False;
Zntfvenda.Sql.Clear;
Zntfvenda.Sql.Add(LSaida);
if length(Table1DATAEMIS.Text)0 then Zntfvenda.ParamByName('d1')
AsDateTime := Table1DATAEMIS.AsDateTime;
if length(Table1VRCTB.Text)   0 then Zntfvenda.ParamByName('v1')
AsFloat := Table1VRCTB.Value;
  
   // comparacao dos campos para parametros
Zntfvenda.ExecSql;
   end
   else begin
MId := tmpvendaRegistro.Text;
if tmpVendaDataEmis.Text = Table1DataEmis.Text then begin
 LSaida := 'Update ntfvenda set   No_Maquina='+Table1NO_MAQUINA.Text+'
Especie='+Table1Especie.Text+',Serie='+Table1SERIE.Text;
 LSaida:=LSaida+',Numero='+Table1NUMERO.Text+',DataEmis=:d1,Uf_Dest=
+Table1UF_DEST.Text+',Codctb='+Table1CODCTB.Text;
 LSaida:=LSaida+',CodFiscn='+Table1CODFISCN.Text+',VrCtb=:v1
BaseCalc=:v2,Aliquota=:v3,ImpDeb=:v4,Isentas=:v5,Outras=:v6,';
 Zntfvenda.ExecSql;
// mesma comparacao mas dessa vez serve para o update
end;
   end;
   Table1.Next;
  end;


Alguem poderia me dar uma ideia de como fazer isso + rapido
 
-
Francisco Carlos de Andrade
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]

[As partes desta mensagem que não continham texto foram removidas]






-- 
 FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM 

* Para ver as mensagens antigas, acesse:
http://br.groups.yahoo.com/group/delphi-br/messages

* Para falar com o moderador, envie um e-mail para:
[EMAIL PROTECTED]
 
Links do Yahoo! Grupos

* Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/delphi-br/

* Para sair deste grupo, envie um e-mail para:
[EMAIL PROTECTED]

* O uso que você faz do Yahoo! Grupos está sujeito aos:
http://br.yahoo.com/info/utos.html