Robson, você diz que foi por causa do SEEK, mas não é isso. E sim um erro de posicionamento da área na qual anteriromente tinhas feito o APPEND BLANK. Olha que eu mencionei essa hipótese.
Se você precisa mudar o ponteiro numa pesquisa até mesmo da mesma áera como por exemplo você tem aquela que o colega Eolo falou, que precisaria saber se ja existe e então precisa fazer o SEEK. Veja o meu conselho:
SELE 1
USE CLIENTES SHARED
SET INDEX TO POR_COD,PORCPF // Abra todos os indices ref a este DBF
@ .. GET VCPF PICT... VALID VCPODE(VCPF)
@ .. GET... // continue fazendo seus gets aqui
READ
IF CONF="S"
APPEND BLANK
IF NETERR()=.F.
REPLACE....
DBCOMMIT()
UNLOCK
ENDIF
ENDIF
FUNCTION VCPODE(VCPF)
SELE 1
VQREC:=RECNO()
VQORD:=INDEXORD()
SET ORDER TO 2
SEEK VCPF
IF !FOUND()
VRET:=.T.
ELSE
BEEP()
MENSAGEM("Este cliente ja existe no cadastro.!")
VRET:=.F.
ENDIF
SET ORDER TO VQORD
GOTO VQREC // Com isto volta ao registro em que estava para continuar a incl.
RETURN VRET
Que bom que você conseguiu. Mas ajudou a debater certos conceitos e é valido para você também. Eu acho que as vezes parece ser muito massante tratar sobre um tema, mas aqui trataram-se do problema do Robson e do que poderia estar ocorrendo. Claro que ele iria cortar o embalo se dissesse que ja estava resolvido, mas também é dificil de parar um trem cheio de opiniões... eu acho que alé de sadio é um direito que todos temos em opinar e também de ignorá-las caso não haja interesse, você não acham ?
na minha opnião não é necessários guardar o posicionamento do ponteiro no caso de estar inserindo um registro novo, mas sim quando estou alterando o registro por exemplo:
NOME = A_NOME
ENDE = A_ENDE
CIDA = A_CIDA
REGI = RECNO() //Guardo o Posicionamento aqui
@ 02,10 GET NOME
@ 03,10 GET ENDE
@ 04,10 GET CIDA
READ
IF LASTKEY()<>27
SELE CLIENTE
SET INDEX TO &CLI,&CLI1
GO REGI //Volto o Posicionamento
IF REG_LOCK()
REPLACE A_NOME WITH NOME,A_ENDE WITH ENDE,;
A_CIDA WITH CIDA
ENDIF
DBUNLOCK()
DBCOMMIT()
ENDIF
agora no caso de um registro novo não tem necessidade de guardar o posicionamento.
mas realmente o problema que estava acontecendo comigo era quando eu dava um seek na tabela de produtos e dava replace sem saber se tinha achado o registro. Ou seja não coloquei o !eof() antes do replace para verificar se realmente o codigo continha na tabela.
eu testei e comprovei.
e realmente nossas opniões são muito importantes, pois cada vez mais vejo que somos unidos ajudando uns aos outros. E realmente eu amo esse linguagem CLIPPER.
valeu plabo e a todos.
t+
ROBSON
S COM INFORMÁTICA
CLIPPER 5.3 / FIVEWIN 2.0 / BLINKER 7
XHARBOUR/ BCC582