Peguei a sua pagina o tutorial ensinando os macetes de para colocar um programa em rede, segui as suas dicas e modifiquei uma rotina simples de cadastro de vendedor, porém quando faço uma alteração aparece a mensagem abaixo:
r_lock(0) unrecoverable error 650: processor stack fault.
Segue abaixo a rotina para o amigo analisar....
Código: Selecionar todos
* PROGRAMA : VENDEDOR.PRG
* COMENTARIO : CADASTRO DE VENDEDORES
IF !FILE("INDVE1.IDX")
SELECT 3
USE VENDEDOR SHARED NEW ALIAS VENDEDOR
INDEX ON COD_VEN TO INDVE1
INDEX ON NOME_VEN TO INDVE2
SET INDEX TO INDVE1, INDVE2
ELSE
SELECT 3
USE VENDEDOR SHARED NEW ALIAS VENDEDOR
SET INDEX TO INDVE1, INDVE2
ENDIF
SET DELETED ON
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(03,03,13,76,"Cadastro de Vendedores")
COR("MENU")
@ 06,05 SAY "Cod. Vendedor.:"
@ 08,05 SAY "Nome Vendedor.:"
@ 10,05 SAY "Dt.Cadastro...:"
JANELA(03,63,10,76," MENU ")
COR("MENU")
@ 05,65 PROMPT " Inclusao "
@ 06,65 PROMPT " Alteracao "
@ 07,65 PROMPT " Consulta "
@ 08,65 PROMPT " Delecao "
MENU TO OP
IF LASTKEY() = 27
VENDEDOR->(DBCLOSEAREA())
EXIT
CLS
ENDIF
DO CASE
CASE OP=1
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(03,03,13,76,"Cadastro de Vendedores")
COR("MENU")
@ 06,05 SAY "Cod. Vendedor.:"
@ 08,05 SAY "Nome Vendedor.:"
@ 10,05 SAY "Dt.Cadastro...:"
SELE VENDEDOR
SET ORDER TO 1
GO BOTTOM
WCOD_VEN := COD_VEN + 1
@ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
BEEP()
MENSAGEM("Vendedor j Cadastrado",2)
LOOP
ELSE
@ 08,21 GET WNOME_VEN PICT "@!"
@ 10,21 GET WDTCAD_VEN PICT "@D"
READ
IF WNOME_VEN = SPACE(30)
EXIT
CLS
ENDIF
MENSAGEM("Confirma (S/N):")
@ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
READ
IF WCONF = "S"
SELE VENDEDOR
SET ORDER TO 1
SEEK WCOD_VEN
IF! FOUND()
IF! FOUND()
APPEND BLANK
ENDIF
REPLACE COD_VEN WITH WCOD_VEN
REPLACE NOME_VEN WITH WNOME_VEN
REPLACE DTCAD_VEN WITH WDTCAD_VEN
U_LOCK()
ELSE
GO BOTTOM
WCOD_VEN := COD_VEN + 1
IF! FOUND()
APPEND BLANK
ENDIF
REPLACE COD_VEN WITH WCOD_VEN
REPLACE NOME_VEN WITH WNOME_VEN
REPLACE DTCAD_VEN WITH WDTCAD_VEN
U_LOCK()
ENDIF
ELSE
MENSAGEM("InclusÆo nÆo Efetuada",1)
LOOP
ENDIF
ENDIF
ENDDO
CASE OP=2
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(03,03,13,76,"Altera Cadastro de Vendedores")
COR("MENU")
@ 06,05 SAY "Cod. Vendedor.:"
@ 08,05 SAY "Nome Vendedor.:"
@ 10,05 SAY "Dt.Cadastro...:"
SELE VENDEDOR
SET ORDER TO 2
@ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
@ 08,21 GET WNOME_VEN PICT "@!"
READ
MENSAGEM("Confirma (S/N):")
@ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
READ
IF WCONF = "S"
SELE VENDEDOR
SET ORDER TO 1
IF! FOUND()
APPEND BLANK
ENDIF
R_LOCK()
REPLACE COD_VEN WITH WCOD_VEN
REPLACE NOME_VEN WITH WNOME_VEN
U_LOCK()
ELSE
MENSAGEM("InclusÆo nÆo Efetuada",1)
LOOP
ENDIF
ELSE
BEEP()
MENSAGEM("Vendedor nÆo Cadastrado",2)
LOOP
ENDIF
ENDDO
CASE OP=3
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(03,03,13,76,"Consulta Cadastro de Vendedores")
COR("MENU")
@ 06,05 SAY "Cod. Vendedor.:"
@ 08,05 SAY "Nome Vendedor.:"
@ 10,05 SAY "Dt.Cadastro...:"
SELE VENDEDOR
SET ORDER TO 1
@ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
MENSAGEM("Tecle algo para sair",1)
inkey(0)
ELSE
MENSAGEM("Vendedor nÆo Cadastrado",2)
LOOP
ENDIF
ENDDO
CASE OP=4
DO WHILE .T.
MENSAGEM("Tecle <ESC> para retornar")
WCOD_VEN := 0
WNOME_VEN := SPACE(15)
WDTCAD_VEN := DATAATU
WCONF :="S"
JANELA(03,03,13,76,"Deleta Cadastro de Vendedores")
COR("MENU")
@ 06,05 SAY "Cod. Vendedor.:"
@ 08,05 SAY "Nome Vendedor.:"
@ 10,05 SAY "Dt.Cadastro...:"
SELE VENDEDOR
SET ORDER TO 1
@ 06,21 GET WCOD_VEN VALID (WCOD_VEN>0) PICT "99"
READ
IF LASTKEY() = 27
EXIT
CLS
ENDIF
SEEK WCOD_VEN
IF FOUND()
WCOD_VEN := COD_VEN
WNOME_VEN := NOME_VEN
@ 08,21 SAY WNOME_VEN PICT "@!"
@ 10,21 SAY WDTCAD_VEN PICT "@D"
INKEY(0.1)
MENSAGEM("Confirma (S/N):")
@ 24,48 GET WCONF PICT "@!" VALID WCONF $ "SN"
READ
IF WCONF = "S"
R_LOCK()
DELETE
U_LOCK()
ELSE
LOOP
ENDIF
ELSE
MENSAGEM("Vendedor nÆo Cadastrado",2)
LOOP
ENDIF
ENDDO
ENDCASE
ENDDO
FUNCTION R_LOCK
DO WHILE (!R_LOCK())
MENSAGEM("Aguardendo permissÆo de acesso a base")
ENDDO
RETURN .T.
FUNCTION U_LOCK
SKIP 0
DBUNLOCK()
COMMIT
RETURN .T.