Erro "Processor Stack Fault"
Enviado: 14 Jul 2006 20:34
:| Estou com um problema na função abaixo. Quando eu pressiono f5, para pesquisar, após preencher o campo crondalfa, a prinpípio dá certo. Mas, ao se repetir o procedimento várias vezes, ocorre o erro: Undecoverable error 650: Processor Stack Fault.
Já pesquisei sobre o erro. Isso se dá pelo fato de estar-se chamando a função inn repeditas vezes. E o programa não está suportando.
Há como deixar o programa como está, mas dando algum jeito de não dar esse erro mais?
Ou qual outra solução simples posso usar?
Eu chamo a procedure INN para que ela reinicie e mostre os dados escolhidos pelo usuário para que ele possa trabalhar. Toda hora sai da INN e volta chamando-a...
Obrigado.
Abaixo, algumas partes do programa:
Já pesquisei sobre o erro. Isso se dá pelo fato de estar-se chamando a função inn repeditas vezes. E o programa não está suportando.
Há como deixar o programa como está, mas dando algum jeito de não dar esse erro mais?
Ou qual outra solução simples posso usar?
Eu chamo a procedure INN para que ela reinicie e mostre os dados escolhidos pelo usuário para que ele possa trabalhar. Toda hora sai da INN e volta chamando-a...
Obrigado.
Abaixo, algumas partes do programa:
MATRI = SPACE(7) // REPLICATE(".",7) //SPACE(7)
CRO = SPACE(10)
SOBREN = SPACE(15)
SEX = SPACE(1)
TEL = SPACE(9) //"....-...."
NOM = SPACE(34)
DATN = CTOD(" / / ")
END = SPACE(34)
U = SPACE(2)
PA = SPACE(34)
MA = SPACE(34)
OBS = SPACE(59)
OBS2 = SPACE(72)
DATAH = DATE()
INN()
// CADASTRO
PROCEDURE INN
DO WHILE .T.
//READINSERT(.T.)
SET DELIMITERS ON // PARA ATIVAR O DE BAIXO
SET DELIMITERS TO "[]" // PARA ESCOLHER A MASCARA DO GET
// SET INTENSITY OFF // PARA TIRAR O BRANCO DOS GETS
#INCLUDE "SETCURS.CH" // PARA FUNCIONAR SETCURSOR()
SETCURSOR(SC_INSERT) // SC_INSERT FICA CURSOR PELA METADE. SC_SPECIAL1 FICA CURSOR CHEIO
CLS
SET KEY 28 TO IN()
SET KEY -1 TO IM()
SET KEY -2 TO AL()
SET KEY -3 TO EX()
SET KEY -4 TO PE()
SET KEY -7 TO LI()
SET KEY -41 TO SA()
@ 00,00 TO 24,79
@ 02,30 SAY "CADASTRO DE PACIENTES"
@ 05,31 SAY "INIC.: [..........]"
// @ 05,53 SAY "[P]"
@ 05,61 SAY "DATA:" + DTOC(DATAH)
@ 07,03 SAY "SOBRENOME: [...............]"
@ 07,35 SAY "SEXO: [.]"
@ 07,45 SAY "(M/F)"
@ 07,53 SAY "TELEFONE..: [....-....]"
@ 09,03 SAY "NOME.....: [..................................]"
@ 09,53 SAY "DATA NASC.: [ / / ]"
@ 15,03 SAY "ENDERECO.: [..................................]"
@ 15,53 SAY "UF: [..]"
@ 11,03 SAY "FILIACAO.: [..................................]"
@ 11,53 SAY "(PAI)"
@ 13,14 SAY "[..................................]"
@ 13,53 SAY "(MAE)"
@ 17,03 SAY "OBSERVACOES: [...........................................................]"
@ 19,03 SAY "[........................................................................]"
@ 23,02 SAY "F1-INCLUI F2-IMPRIME F3-ALTERA F4-EXCLUI F5-PESQUISA F8-LIMPA F12-SAI"
@ 05,03 SAY "MATRICULA: [.......]"
@ 05,14 GET MATRI PICT "@!"
READEXIT(.T.) // PARA PODER SAIR DO GET COM SETA, COMO SE FOSSE ENTER
READ
/* IF LASTKEY() = -9
RETURN
ENDIF */
GO TOP
LOCATE FOR MATRICULA = MATRI
IF FOUND()
MATRI = MATRICULA
CRO = CRONDALFA
SEX = SEXO
TEL = TELEFONE
NOM = NOME
SOBREN = SOBRENOME
DATN = CTOD(DATA)
END = ENDERECO
U = UF
PA = PAI
MA = MAE
OBS = OBSERV1
OBS2 = OBSERV2
@ 05,67 SAY " "
DATAH = CTOD(DATAHOJE)
ENDIF
DO WHILE .T.
SAVE SCREEN TO INCLU
/* IF LASTKEY() = -9
RETURN
ENDIF */
IF LASTKEY() = -7
EXIT
ENDIF
@ 00,00 TO 24,79
@ 02,30 SAY "CADASTRO DE PACIENTES"
@ 05,14 GET MATRI PICT "@!"
@ 05,38 GET CRO PICT "@!" // WHEN VER()
// @ 05,54 GET CAR PICT "@!"
@ 05,66 SAY DATAH
/* IF DATAH = SPACE(10) // !EMPT(DATAH)
@ 05,61 SAY "DATA: " + DATAHOJE
ELSE
@ 05,61 SAY "DATA: " + DTOC(DATE())
ENDIF
*/
@ 07,14 GET SOBREN PICT "@!" // valid testGet( SOBREN )
@ 07,41 GET SEX PICT "@!" VALID SEX $ "MF. "
@ 07,45 SAY "(M/F)"
@ 07,65 GET TEL PICT "9999-9999"
@ 09,14 GET NOM PICT "@!" // valid testGet( NOM )
@ 09,65 GET DATN
@ 11,14 GET PA PICT "@!" // valid testGet( PA )
@ 11,53 SAY "(PAI)"
@ 13,14 GET MA PICT "@!" // valid testGet( MA )
@ 13,53 SAY "(MAE)"
@ 15,14 GET END PICT "@!"
@ 15,57 GET U PICT "@!" // valid testGet( U )
@ 17,16 GET OBS PICT "@!"
@ 19,03 GET OBS2 PICT "@!"
@ 23,02 SAY "F1-INCLUI F2-IMPRIME F3-ALTERA F4-EXCLUI F5-PESQUISA F8-LIMPA F12-SAI"
KEYBOARD CHR(13)
READ
ENDDO
ENDDO
//FUNCOES PARA AS PESQUISAS
FUNCTION PESQ5
// SETCOLOR("N/W")
IF LASTKEY() = 13
MATRI = MATRICULA
KEYBOARD CHR(23) // + CHR(23) + CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+
CHR(23)+ CHR(23) + CHR(23) + CHR(23) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR UMA TECLA
SET FILTER TO
INN()
RETURN(0)
ENDIF
IF LASTKEY() = 27
RESTORE SCREEN FROM INCLU
SET FILTER TO
RETURN(0)
ENDIF
FUNCTION PESQ9
// SETCOLOR("N/W")
IF LASTKEY() = 13
MATRI = MATRICULA
KEYBOARD CHR(23) + CHR(23) + CHR(23)+ CHR(23) + CHR(23) // + CHR(23)+ CHR(23)+ CHR(23)+ CHR(23)+
CHR(23)+ CHR(23) + CHR(23) + CHR(23) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR UMA TECLA
SET FILTER TO
INN()
RETURN(0)
ENDIF
IF LASTKEY() = 27
RESTORE SCREEN FROM INCLU
SET FILTER TO
RETURN(0)
ENDIF
FUNCTION PESQ7
// SETCOLOR("N/W")
IF LASTKEY() = 13
MATRI = MATRICULA
KEYBOARD CHR(23) + CHR(23) + CHR(23)+ CHR(23) + CHR(23) + CHR(23)+ CHR(23) // + CHR(23)+
CHR(23)+ CHR(23)+ CHR(23) + CHR(23) + CHR(23) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR
UMA TECLA
SET FILTER TO
INN()
RETURN(0)
ENDIF
IF LASTKEY() = 27
RESTORE SCREEN FROM INCLU
SET FILTER TO
RETURN(0)
ENDIF
// PESQUISAR
PROCEDURE PE
SAVE SCREEN TO INCLU
IF ROW() = 5 // A FUNCAO ROW() FORNECE O NR. DA LINHA NA QUAL ESTA POSICIONADO O CURSOR NA TELA.
IF EMPT(CRO)
@ 21,05 SAY "*** CRONDALFA VAZIO ***"
INKEY(1)
@ 21,05 SAY " "
RESTORE SCREEN FROM INCLU
RETURN
ENDIF
GO TOP
LOCATE FOR CRONDALFA = CRO
IF .NOT. FOUND()
RESTORE SCREEN FROM INCLU
KEYBOARD CHR(19) + CHR(19) + CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+ CHR(19)+
CHR(19) // CHR(5) + // KEYBOARD - COMO UM PRESSIONAR UMA TECLA
RETURN
ELSE
PRIVATE V1[3]
V1[01] = "MATRICULA"
V1[02] = "NOME"
V1[03] = "DATA"
SET FILTER TO CRONDALFA = CRO
DBGOTOP()
@ 09,04 CLEAR TO 21,71
@ 09,04 TO 21,71
DBEDIT(10,05,20,70,V1,"PESQ5")
ENDIF
ENDIF