unit ufrmDigito9; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.Math, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, umstMaster, Vcl.ComCtrls, Vcl.StdCtrls, Data.DB, Vcl.ExtCtrls, Vcl.Grids, Vcl.DBGrids, ZAbstractRODataset, ZAbstractDataset, ZDataset; type TfrmDigito9 = class(TmstMaster) dtsTelefones: TDataSource; ProgressBar1: TProgressBar; lbl_tel: TLabel; lbl_tel2: TLabel; Timer1: TTimer; DBGrid1: TDBGrid; qryTelefones: TZQuery; qryTelefonesID_TELEFONE: TIntegerField; qryTelefonesID_DEVEDOR: TIntegerField; qryTelefonesNR_DDD: TWideStringField; qryTelefonesNR_NUMERO: TWideStringField; qryTelefonesTP_ATIVO: TWideStringField; qryTelefonesTP_TIPOTEL: TWideStringField; qryTelefonesTX_DESC: TWideStringField; qryTelefonesTX_OBS: TWideMemoField; qryTelefonesID_ULTIMO_USUARIO: TIntegerField; qryTelefonesDT_HORA_ULTIMA_ATT: TDateTimeField; procedure Timer1Timer(Sender: TObject); private procedure Arrumatel; { Private declarations } public { Public declarations } end; var frmDigito9: TfrmDigito9; implementation {$R *.dfm} uses udtmSystem; procedure TfrmDigito9.Arrumatel; var numero: string; a, b: Integer; begin Screen.Cursor := crHourGlass; lbl_tel.Caption := 'Abrindo tabela de Telefones...'; lbl_tel.Left := 192 - floor(lbl_tel.Width / 2); with dtmSystem do begin if tblDevedores.Active then begin tblDevedores.Close; end; qryTelefones.Open; qryTelefones.First; b := qryTelefones.RecordCount; ProgressBar1.Max := b; ProgressBar1.Step := 1; ProgressBar1.Position := 0; a := 1; lbl_tel.Caption := 'Processando...'; lbl_tel.Left := 192 - floor(lbl_tel.Width / 2); lbl_tel2.Caption := 'Telefone ' + inttostr(a) + ' de ' + inttostr(b); lbl_tel2.Left := 192 - floor(lbl_tel2.Width / 2); while not qryTelefones.Eof do begin lbl_tel2.Caption := 'Telefone ' + inttostr(a) + ' de ' + inttostr(b); lbl_tel2.Left := 192 - floor(lbl_tel2.Width / 2); numero := qryTelefonesNR_NUMERO.AsString; try numero := FormatTelefone(numero); qryTelefones.Edit; qryTelefonesNR_NUMERO.AsString := numero; if length(numero) = 9 then begin qryTelefonesTP_TIPOTEL.AsString := 'F'; end; if length(numero) = 10 then begin qryTelefonesTP_TIPOTEL.AsString := 'M'; end; qryTelefones.Post; except on E: Exception do begin qryTelefones.Edit; qryTelefonesTX_OBS.AsString := qryTelefonesTX_OBS.AsString + sLineBreak + 'Número possivelmente inválido'; qryTelefones.Post; end; end; qryTelefones.Next; a := a + 1; ProgressBar1.Position := a; Application.ProcessMessages; end; qryTelefones.Close; end; lbl_tel.Caption := 'Terminou.'; lbl_tel.Left := 192 - floor(lbl_tel.Width / 2); Screen.Cursor := crDefault; end; //function TfrmDigito9.FormatTelefone(telefone: string): string; //var // digito: Integer; //begin // telefone := StringReplace(telefone, '(', '', [rfReplaceAll, rfIgnoreCase]); // telefone := StringReplace(telefone, ')', '', [rfReplaceAll, rfIgnoreCase]); // telefone := StringReplace(telefone, '-', '', [rfReplaceAll, rfIgnoreCase]); // telefone := StringReplace(telefone, ' ', '', [rfReplaceAll, rfIgnoreCase]); // if length(telefone) = 8 then // begin // digito := strtoint(copy(telefone, 1, 1)); // case digito of // 2, 3, 4, 5: // begin // telefone := copy(telefone, 1, 4) + '-' + copy(telefone, 5, 4); // end; // 6, 7, 8, 9: // begin // telefone := '9' + copy(telefone, 1, 4) + '-' + copy(telefone, 5, 4); // end; // 1: // begin // telefone := ''; // end; // end; // end // else // begin // if strtoint(copy(telefone, 1, 1)) = 9 then // begin // telefone := copy(telefone, 1, 5) + '-' + copy(telefone, 6, 4); // end // else // begin // telefone := ''; // end; // end; // if telefone <> '' then // begin // Result := telefone; // end // else // begin // raise Exception.Create('Número de telefone inválido.'); // end; //end; procedure TfrmDigito9.Timer1Timer(Sender: TObject); begin inherited; Timer1.Enabled := False; Arrumatel; end; end.