Página 1 de 1

Prg não executa os comandos Informados

Enviado: 27 Set 2004 09:26
por kristo
Bom dia pessoal, tenho probleminha aqui, um amigo do forum desenvolveu uma PRG para me ajudar, mais ela não altera os dados que preciso......tenho um campo na BDF chamado " Fone " e como a maioria dos prefixos mudaram em preciso alterar..........segue abaixo a PRG montada...........o que eu preciso é o seguinte..........

Ex.. o telefone antigo é 2866565

o novo prefixo é 3286

teria que ficar assim....32866565

Se alguém puder dar uma olhadinha e me ajudar, eu agradeço

O nome da DBF é " FISICO "


set dele on
set date brit
? "Aguarde Indexando arquivo..."
USE FISICO
INDEX ON left(FONE,3) to tel
dbsetindex("tel")
CLEAR
dbgotop()

cTel := space(3)
cTel2 := space(1)
@ 10,10 say "Das Antigas: " get cTel
@ 11,10 say "Novo Inicio: " get cTel2
read
if lastkey()=27
return
endif
dbseek(cTel)
WHILE LEFT(FONE,3)==alltrim(cTel) .and. !EOF()

@ 12,10 say "Processando..."+strzero(recno(),7)+"/"+strzero(lastrec(),7)

if left(FONE,3) == alltrim(cTel)
Replace FONE with alltrim(cTel2)+alltrim(FONE)
endif

dbskip()

ENDDO

dbclosearea()

ALteração em campo indexado...

Enviado: 27 Set 2004 09:57
por gransoft
ARAGUARI-MG, 27 de setembro de 2004.

Prezado Kristo,

Você não vai conseguir várias alterações em campo indexado, dentro de um laço DO WHILE ... ENDDO. Abra o DBF e teste o campo FONE, sem indexar.
Exemplo:

Código: Selecionar todos

*
CLEAR
*
cAnt  := "286"
cNovo := "3286"
*
USE FISICO
GOTO TOP
*
WHILE (.NOT. EOF())
   IF SUBSTR(FONE,1,3)==cAnt
      cFone := STUFF(FONE,1,3,cNovo)
      ? FONE, cFone
      REPLACE FONE WITH cFone
   END
   SKIP
END
QUIT
***
Se você executar um REPLACE em campo indexado, o registro/ponteiro/índice será reposicionado na NOVA ordem, e o laço estabelecido não será percorrido da maneira que você deseja até o final, ocorrendo as falhas que você já observou.

Atenciosamente,
Janis Peters Grants.

http://www.gransoft.com.br
gransoft@zipmail.com.br