inclusão involuntária de dados
Enviado: 03 Jan 2006 20:58
Olá, galera,
Estou com um probleminha em uma rotina de inclusão. É que quando pressiono ESC durante um GET, o programa, mesmo assim, inclui os dados digitados ou em branco. A rotina inclui os dados sempre que se pressionar ENTER duas vezes. Uma é para inlcuir e a outra, para sair. Só que se o usuário pressiona acidentalmente dois ENTERs na última inclusão, já era, pois ao se pressionar ESC para sair, o programa inclui o registro, pois ele já está esperando novo registro. Assim, nessas duas ocasiões, o programa inclui dados não desejados. Se alguém puder cooperar nessa comigo, agradeço.
Eu já tentei várias alternativas, mas não consegui. Eu gostaria de poder pressionar ESC em qualquer momento e o programa não incluir nada no banco de dados.
Aí vai o fonte da rotina de inclusão para que possam analizar o que acontece e me dar um parecer.
// INCLUSAO DE NOVOS DADOS
PROCEDURE INCLUIR
SET CONFIRM ON
SET ESCAPE ON
MED = SPACE(15) // MEDICO
CLI = SPACE(10) // CLINICA
DAT = CTOD(" / / ") // DATA
PRO = SPACE(7) // PRONTUARIO
CLS
@ 07,03 CLEAR TO 17,70
@ 07,03 TO 17,70
@ 03,25 SAY "CADASTRANDO"
@ 20,19 SAY " NAO DESEJANDO INCLUIR MAIS REGISTROS,"
@ 22,19 SAY "PRESSIONE 'ESC' PARA VOLTAR AO MENU PRINCIPAL"
@ 18,19 SAY " NAO USE ACENTOS NEM CEDILHA! "
@ 09,06 say "MEDICO.......:" GET MED PICT "@!" valid testaGet( MED )
@ 11,06 SAY "CLINICA......:" GET CLI PICT "@!" valid testaGet( CLI )
@ 13,06 SAY "DATA ........:" GET DAT
@ 15,06 SAY "PRONTUARIO ..:" GET PRO PICT "9999999" // VALID !EMPT(PRO)
READ
@ 24,25 SAY "REGISTRO INCLUIDO: CONTINUAR <ENTER> OU SAIR <ESC>"
INKEY(0)
APPEND BLANK
REPLACE MEDICO WITH MED
REPLACE CLINICA WITH CLI
REPLACE DATA WITH DAT
REPLACE PRONTUARIO WITH PRO
DBUNLOCK() // LIBERA O REGISTRO PARA USO
DBCOMMIT() // DESCARREGA O CACHE DO DISCO DEPOIS DO DBUNLOCK()
DO WHILE .T.
@ 24,25 SAY " "
IF LASTKEY() = 27
RETURN
ENDIF
PRO = SPACE(7) // PRONTUARIO
@ 15,06 SAY "PRONTUARIO ..:" GET PRO PICT "9999999" VALID !EMPT(PRO)
READ
@ 24,25 SAY "REGISTRO INCLUIDO: CONTINUAR <ENTER> OU SAIR <ESC>"
INKEY(0)
APPEND BLANK
REPLACE MEDICO WITH MED
REPLACE CLINICA WITH CLI
REPLACE DATA WITH DAT
REPLACE PRONTUARIO WITH PRO
DBUNLOCK() // LIBERA O REGISTRO PARA USO
DBCOMMIT() // DESCARREGA O CACHE DO DISCO DEPOIS DO DBUNLOCK()
ENDDO
GO TOP
WHILE .NOT. EOF()
IF PRONTUARIO = SPACE(7)
DELE
PACK
ENDIF
SKIP
ENDDO
RETURN
function testaGet( cVar )
for i := 1 to len( alltrim( cVar ) )
if isDigit( substr( cVar, i, 1 ) )
return .f.
endif
next
return .t.
Estou com um probleminha em uma rotina de inclusão. É que quando pressiono ESC durante um GET, o programa, mesmo assim, inclui os dados digitados ou em branco. A rotina inclui os dados sempre que se pressionar ENTER duas vezes. Uma é para inlcuir e a outra, para sair. Só que se o usuário pressiona acidentalmente dois ENTERs na última inclusão, já era, pois ao se pressionar ESC para sair, o programa inclui o registro, pois ele já está esperando novo registro. Assim, nessas duas ocasiões, o programa inclui dados não desejados. Se alguém puder cooperar nessa comigo, agradeço.
Eu já tentei várias alternativas, mas não consegui. Eu gostaria de poder pressionar ESC em qualquer momento e o programa não incluir nada no banco de dados.
Aí vai o fonte da rotina de inclusão para que possam analizar o que acontece e me dar um parecer.
// INCLUSAO DE NOVOS DADOS
PROCEDURE INCLUIR
SET CONFIRM ON
SET ESCAPE ON
MED = SPACE(15) // MEDICO
CLI = SPACE(10) // CLINICA
DAT = CTOD(" / / ") // DATA
PRO = SPACE(7) // PRONTUARIO
CLS
@ 07,03 CLEAR TO 17,70
@ 07,03 TO 17,70
@ 03,25 SAY "CADASTRANDO"
@ 20,19 SAY " NAO DESEJANDO INCLUIR MAIS REGISTROS,"
@ 22,19 SAY "PRESSIONE 'ESC' PARA VOLTAR AO MENU PRINCIPAL"
@ 18,19 SAY " NAO USE ACENTOS NEM CEDILHA! "
@ 09,06 say "MEDICO.......:" GET MED PICT "@!" valid testaGet( MED )
@ 11,06 SAY "CLINICA......:" GET CLI PICT "@!" valid testaGet( CLI )
@ 13,06 SAY "DATA ........:" GET DAT
@ 15,06 SAY "PRONTUARIO ..:" GET PRO PICT "9999999" // VALID !EMPT(PRO)
READ
@ 24,25 SAY "REGISTRO INCLUIDO: CONTINUAR <ENTER> OU SAIR <ESC>"
INKEY(0)
APPEND BLANK
REPLACE MEDICO WITH MED
REPLACE CLINICA WITH CLI
REPLACE DATA WITH DAT
REPLACE PRONTUARIO WITH PRO
DBUNLOCK() // LIBERA O REGISTRO PARA USO
DBCOMMIT() // DESCARREGA O CACHE DO DISCO DEPOIS DO DBUNLOCK()
DO WHILE .T.
@ 24,25 SAY " "
IF LASTKEY() = 27
RETURN
ENDIF
PRO = SPACE(7) // PRONTUARIO
@ 15,06 SAY "PRONTUARIO ..:" GET PRO PICT "9999999" VALID !EMPT(PRO)
READ
@ 24,25 SAY "REGISTRO INCLUIDO: CONTINUAR <ENTER> OU SAIR <ESC>"
INKEY(0)
APPEND BLANK
REPLACE MEDICO WITH MED
REPLACE CLINICA WITH CLI
REPLACE DATA WITH DAT
REPLACE PRONTUARIO WITH PRO
DBUNLOCK() // LIBERA O REGISTRO PARA USO
DBCOMMIT() // DESCARREGA O CACHE DO DISCO DEPOIS DO DBUNLOCK()
ENDDO
GO TOP
WHILE .NOT. EOF()
IF PRONTUARIO = SPACE(7)
DELE
PACK
ENDIF
SKIP
ENDDO
RETURN
function testaGet( cVar )
for i := 1 to len( alltrim( cVar ) )
if isDigit( substr( cVar, i, 1 ) )
return .f.
endif
next
return .t.