Antes de mais nada peço desculpas caso já exista tópicos com minha solução. Achei um tópico com o mesmo assunto, mas não me ajudou muito .
Estou com mais um probleminha em clipper. Creio que devo estar errando em algo relacionado a criação de índices.
Mas vou tentar explicar da melhor forma possível.
Tenho um código que serve para alterar o código dos produtos. Ele está funcionando bem. Porém, há um erro do qual estou tentando corrigir, mas quando uso o comando "seek" dá um erro.
esse é o código normal sem erro:
Código: Selecionar todos
SET DELE ON
CLS
SELE 2
USE CADPOS
p1 := p2 := SPACE(12)
pRESP := SPACE(3) //recebe confirmacao
p1COR := p1TAM := p2COR := p2TAM := p2ESTATUAL := p1ESTATUAL := ESTATUALN:= SPACE(4)
@ 03,01 TO 20,51
@ 05,10 SAY "MUDAR O CODIGO ----> " GET P1 PICT "@!" VALID !EMPTY(P1)
@ 07,10 SAY "PARA O CODIGO -----> " GET P2 PICT "@!" VALID !EMPTY(P2)
@ 09,10 SAY "Confirma Alteracao (S/N) ?" GET pRESP PICT "@!" VALID !EMPTY(pRESP)
READ
IF LASTKEY()=27
CLOSE ALL
CLS
RETURN
ENDIF
//condicao confirmacao Sim ou Nao
IF pRESP = "N"
CLOSE ALL
CLS
RETURN
ELSE
////////////////
// CADPOS.DBF //
////////////////
SELE 2 // CADPOS
GO TOP
CONTA := 1
@ 10,01
@ 10,03 SAY "Aguarde um momento... Atualizando CADPOS.DBF !!!"
WHILE ! EOF()
@ 12,10 SAY CONTA
//se nao houver codigo sai //
IF CODIGO#P1
SKIP;LOOP
ELSE
REPL CODIGO WITH P2
CONTA++
SKIP
ENDIF
END //final dowhile //
DBCOMMITALL()
@ 15,06 SAY "* * * ROTINA REALIZADA COM SUCESSO * * *"
@ 17,06 SAY "A T E N C A O ===> AO ENTRAR NO SISTEMA, INDEXAR TODOS OS ARQUIVOS !!!"
@ 19,06 SAY "TECLE ALGO PARA CONTINUAR ... "
INKEY(0)
//Final "if" Sim ou Nao
ENDIF
CLOSE ALL
CLS
RETURN
Código: Selecionar todos
SET DELE ON
CLS
SELE 2
USE CADPOS
p1 := p2 := SPACE(12)
pRESP := SPACE(3) //recebe confirmacao
p1COR := p1TAM := p2COR := p2TAM := p2ESTATUAL := p1ESTATUAL := ESTATUALN:= SPACE(4)
@ 03,01 TO 20,51
@ 04,10 SAY "ALTERADO 10/08/2011"
@ 05,10 SAY "MUDAR O CODIGO ----> " GET P1 PICT "@!" VALID !EMPTY(P1)
@ 07,10 SAY "PARA O CODIGO -----> " GET P2 PICT "@!" VALID !EMPTY(P2)
@ 09,10 SAY "Confirma Alteracao (S/N) ?" GET pRESP PICT "@!" VALID !EMPTY(pRESP)
READ
IF LASTKEY()=27
CLOSE ALL
CLS
RETURN
ENDIF
//condicao confirmacao Sim ou Nao
IF pRESP = "N"
CLOSE ALL
CLS
RETURN
ELSE
////////////////
// CADPOS.DBF //
////////////////
SELE 2 // CADPOS
GO TOP
CONTA := 1
@ 10,01
@ 10,03 SAY "Aguarde um momento... Atualizando CADPOS.DBF !!!"
WHILE ! EOF()
@ 12,10 SAY CONTA
//se nao houver codigo sai //
IF CODIGO#P1
SKIP;LOOP
ENDIF
* //PROCURA CODIGO 2
SELE CADPOS
SEEK P2
IF FOUND() // SE ENCONTRAR RECEBE OS VALORES
p2COR := COR
p2TAM := TAMANHO
p2ESTATUAL := ESTATUAL
SEEK P1 // PROCURA CODIGO 1
IF FOUND() // SE ENCONTRAR RECEBE OS VALORES
p1COR := COR
p1TAM := TAMANHO
IF p2COR = p1COR .AND. p2TAM = p1TAM // CONDIÇÃO COR E TAMANHO DEVEM SER IGUAIS
ESTATUALN := p1ESTATUAL + p2ESTATUAL // SE FOR IGUAL, ESTATUAL DEVE SOMAR ESTATUAL DO CODIGO 1 COM CODIGO 2
REPL CODIGO WITH P2 // MUDA O CODIGO
REPL ESTATUAL WITH ESTATUALN // MUDA O ESTATUAL
CONTA++
SKIP
ENDIF
ENDIF
ELSE
REPL CODIGO WITH P2 // APENAS MUDA O CODIGO
CONTA++
SKIP
ENDIF
END //final dowhile //
DBCOMMITALL()
@ 15,06 SAY "* * * ROTINA REALIZADA COM SUCESSO * * *"
@ 17,06 SAY "A T E N C A O ===> AO ENTRAR NO SISTEMA, INDEXAR TODOS OS ARQUIVOS !!!"
@ 19,06 SAY "TECLE ALGO PARA CONTINUAR ... "
INKEY(0)
//Final "if" Sim ou Nao
ENDIF
CLOSE ALL
CLS
RETURN

