Re: [delphi-br] Demora para atualizar banco de dados mysql
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
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
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