Da pra otimizar este processo

Delphi

02/06/2009

Galera,

Tenho este processo abaixo, gostaria de saber se tem como eu otimizá-lo..

Agradeço a todos...

O código dispensa comentarios, porem quem nao entender só dar um toque que eu explico...

Obrigado


unit Principal;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, StdCtrls, Gauges, DBTables, ExtCtrls;

type
  TForm1 = class(TForm)
    qryDados: TADOQuery;
    adoConn: TADOConnection;
    qryDadosDoc: TStringField;
    qryDadosCliente: TStringField;
    qryDadosTipo_End: TStringField;
    qryDadosNum: TStringField;
    qryDadosComplem: TStringField;
    qryDadosCep: TStringField;
    qryDadosBairro: TStringField;
    qryDadosLocal: TStringField;
    qryDadosCidade: TStringField;
    qryDadosUf: TStringField;
    qryDadosDDD: TStringField;
    qryDadosTel: TStringField;
    qryDadosData: TDateTimeField;
    gp: TGauge;
    btnGerar: TButton;
    MainSession: TSession;
    dbsPrincipal: TDatabase;
    stpProxNumero: TStoredProc;
    qryInsere: TADOQuery;
    qryDadosEnde: TStringField;
    Timer1: TTimer;
    btnCancelar: TButton;
    procedure btnGerarClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnCancelarClick(Sender: TObject);
  private
      mImportando, mCancela : Boolean;
      function ProxNumero(prNmCampo: String): String;
      function L_If( Condicao : Boolean; Valor1 , Valor2 : Variant ) : Variant;
      function Aspas(cString: String): String;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.Aspas(cString: String): String;
var
   mAspa, mAux: String;
   mTamVar, nPos: Integer;
begin

   if Pos( ´´´´ , cString ) > 0 then begin

     mAspa   := ´´´´ + ´+´ + ´´´´ + ´´´´ + ´´´´ + ´´´´ + ´+´ + ´´´´;
     mTamVar := Length(cString);
     for nPos := 1 to mTamVar do begin
         if Copy(cString,nPos,1) = ´´´´ then
           mAux := mAux + mAspa
              else
                 mAux := mAux + cString[nPos]
     end;

     Result := ´´´´ + mAux + ´´´´;
     end
      else
         Result := QuotedStr( cString );

end;


procedure TForm1.btnGerarClick(Sender: TObject);
var
   mDDD, mTel : Array[1..5] of String;
   mNrContrCli, mCpf, mNome, mCdCli, mEnd, mLog, mCep, mUF, mBairro, mCidade, MNro, mCompl : String;
   mPasso : integer;

   procedure LimpaArray;
   var
      i : byte;
   begin

      for i:= 1 to 5 do begin
         mDDD[i] := ´´;
         mTel[i] := ´´;
         end;

   mNrContrCli := ´´;
   mCpf        := ´´;
   mNome       := ´´;
   mCdCli      := ´´;
   mEnd        := ´´;
   mLog        := ´´;
   mCep        := ´´;
   mUF         := ´´;
   mBairro     := ´´;
   mCidade     := ´´;
   MNro        := ´´;
   mCompl      := ´´;
   end;

begin

   mImportando := True;

   adoConn.Connected := True;
   qryDados.Open;
   gp.MaxValue := qryDados.RecordCount;

   while not qryDados.Eof do begin
      Application.ProcessMessages;

      if mCancela then
         Break;

      LimpaArray;
      mPasso := 0;
      mCpf := qryDadosDoc.AsString;

      while (not qryDados.Eof) and (mCpf = qryDadosDoc.AsString) do begin
         Inc( mPasso );

         case mPasso of
            1 : begin
                mNome       := Copy(qryDadosCliente.AsString,1,40);
                mNrContrCli := ProxNumero( ´NrContrCli´ );
                mCdCli      := ProxNumero( ´CdCli´ );
                mCidade     := Copy(qryDadosCidade.AsString,1,20);
                mCep        := Copy(qryDadosCep.AsString,1,8);
                mUF         := Copy(qryDadosUf.AsString,1,2);
                mBairro     := Copy(qryDadosBairro.AsString,1,20);
                mEnd        := Copy(qryDadosEnde.AsString, 1,40);
                mLog        := Copy(qryDadosTipo_End.AsString,1,10);
                mCompl      := Copy(qryDadosComplem.AsString,1,15);
                MNro        := Copy(qryDadosNum.AsString,1,6);

                mDDD[mPasso] := qryDadosDDD.AsString;
                mTel[mPasso] := qryDadosTel.AsString;
                end;
            2,3,4,5 : begin
                      mDDD[mPasso] := qryDadosDDD.AsString;
                      mTel[mPasso] := qryDadosTel.AsString;
                      end;
            end;

         gp.Progress := gp.Progress + 1;
         qryDados.Next
         end;

      //Inserção na EndCli
      with qryInsere , SQL do begin
            Clear;
            { Insere na tabela de clientes }
            Add( ´Insert Clientes(NrContrCli, CdCli, CdAtiv, CdOrig, NmCli, CPF, Situac, FisJur, DtInc, Etiqueta, CdStatus, CdTpCli)´ );
            Add( ´Values(  ´ );
Add( QuotedStr( mNrContrCli ) + ´ ,´  );
     Add( QuotedStr( mCdCli ) + ´ ,´ );
    Add( QuotedStr( ´001´ ) + ´ ,´ );
    Add( QuotedStr( ´005´ ) + ´ ,´ );
     Add( QuotedStr( mNome ) + ´ ,´ );
       Add( QuotedStr( mCpf ) + ´ ,´ );
    Add( QuotedStr( ´A´ ) + ´ ,´ );
    Add( QuotedStr( ´F´ ) + ´ ,´ );
     Add( QuotedStr( FormatDateTime( ´yyyy-mm-dd´ , Date() ) ) + ´ ,´ );
  Add( QuotedStr( ´S´ ) + ´ ,´ );
  Add( QuotedStr( ´01´ ) + ´ ,´ );
   Add( QuotedStr( ´01´ ) );
            Add( ´)´ );
            Add( ´´ );
            { Insere na tabela de endereco de cliente }
            Add( ´Insert EndCli ( NrContrCli, ClassifEnd, NrSeq, CdLog, Ender, Nro, Compl, Bairro, Cidade, Estado, Cep, DDD,  Tel1, LocTel1, DDD2, LocTel2, Tel2, DDD3, LocTel3, Tel3, Fax, DDDCdBip, CdBip ) Values (´ );
Add( QuotedStr( mNrContrCli ) + ´,´  );
Add( QuotedStr(´1´) + ´,´ );
     Add( QuotedStr( ´01´ ) + ´,´ );
     Add( QuotedStr( mLog ) + ´,´ );
     Add( Aspas( mEnd ) + ´,´ );
       Add( QuotedStr( MNro ) + ´,´ );
     Add( L_If( mCompl <> ´´, QuotedStr( mCompl ) , ´NULL´ ) + ´,´ );
    Add( Aspas( mBairro ) + ´,´ );
    Add( Aspas( mCidade ) + ´,´ );
    Add( QuotedStr( mUF ) + ´,´ );
       Add( QuotedStr( mCep ) + ´,´ );
       Add( L_if( mddd[1] <> ´´ , QuotedStr( mDDD[1] ) , ´NULL´ ) + ´,´ );
      Add( L_if( mTel[1] <> ´´ , QuotedStr( mTel[1] ) , ´NULL´ ) + ´,´ );
   Add( L_if( mddd[1] <> ´´ , QuotedStr( ´R´ )     , ´NULL´ ) + ´,´ );
      Add( L_if( mddd[2] <> ´´ , QuotedStr( mDDD[2] ) , ´NULL´ ) + ´,´ );
   Add( L_if( mddd[2] <> ´´ , QuotedStr( ´R´ )     , ´NULL´ ) + ´,´ );
      Add( L_if( mTel[2] <> ´´ , QuotedStr( mTel[2] ) , ´NULL´ ) + ´,´ );
      Add( L_if( mddd[3] <> ´´ , QuotedStr( mDDD[3] ) , ´NULL´ ) + ´,´ );
   Add( L_if( mddd[3] <> ´´ , QuotedStr( ´R´ )     , ´NULL´ ) + ´,´ );
      Add( L_if( mTel[3] <> ´´ , QuotedStr( mTel[3] ) , ´NULL´ ) + ´,´ );
       Add( L_if( mTel[4] <> ´´ , QuotedStr( mTel[4] ) , ´NULL´ ) + ´,´ );
  Add( L_if( mddd[5] <> ´´ , QuotedStr( mDDD[5] ) , ´NULL´ ) + ´,´ );
     Add( L_if( mTel[5] <> ´´ , QuotedStr( mTel[5] ) , ´NULL´ ) );
         Add( ´)´ );
         Add( ´´ );
         { Insere na tabela de inseridos da telefonica }
         Add( ´Insert TbTemporaria Values( ´ + QuotedStr( mCpf ) + ´ )´ );
         ExecSQL;
         end;

      end; //qryDados

   adoConn.Connected := False;
   qryDados.Close;
   gp.Progress := 0;
   mImportando := False;

   if mCancela then
      Close;

end;

function TForm1.L_If(Condicao: Boolean; Valor1, Valor2: Variant): Variant;
begin

   if Condicao then
      Result := Valor1
         else
          Result := Valor2;

end;

function TForm1.ProxNumero(prNmCampo: String): String;
begin

   with stpProxNumero do begin
      ParamByName(´@Campo´).AsString := prNmCampo;
      try
         ExecProc;
      except
         ProxNumero := ProxNumero(prNmCampo);
         Exit;
      end;
      ProxNumero := ParamByName(´@ProxNumero´).AsString;
   end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin

   if mImportando then Exit;

   btnGerar.Click;


end;

procedure TForm1.FormCreate(Sender: TObject);
begin

   mImportando := False;
   mCancela    := False;

end;

procedure TForm1.btnCancelarClick(Sender: TObject);
begin

   mCancela := True;

end;

end.



Tremonti

Tremonti

Curtidas 0

Respostas

Tremonti

Tremonti

02/06/2009

Alguem


GOSTEI 0
POSTAR