Aprenda a deletar um registro do banco de dados em nossa rotina comentada abaixo. Consultamos se existe o CPF no banco de dados e se verdadeiro mostra os dados do registro na tela e pede confirmação do usuário para apagar.
FUNCTION DELETA()
USE AGENDA ALIAS AG SHARED NEW // ABRE O BANCO DE DADOS EM MODO COMPARTILHADO
SET INDEX TO AGENDA // ABRE O ARQUIVO DE ÍNDICE
AG->(ORDSETFOCUS("CPF")) // COLOCA ORDENADO POR CPF
SETCOLOR("W+/N")
@ 04,01 SAY PADC("APAGAR REGISTRO DA AGENDA", 77, " ") // CENTRALIZA DENTRO DE 77 CARACTERES
DO WHILE .T. // CRIA UM LOOP SUPOSTAMENTE INFINITO
@ 07,01 CLEAR TO 22,78 // LIMPA ESSA ÁREA
cCPF := SPACE(11) // DEFINE CPF CARACTER PORQUE O PONTO DA MÁSCARA É LIDO COMO DECIMAL
@ 09,10 SAY "CPF.:" GET cCPF PICTURE "@R 999.999.999-99" // EXIBE UMA MÁSCARA NO GET QUE RETORNA 99999999999
@ 24,00 SAY PADL("Insira um número de CPF para pesquisar",54, " ") COLOR "W+/BG" // MENSAGEM NA LINHA DE STATUS
READ // AGUARDA A LEITURA DOS GETs
IF LASTKEY() = K_ESC
EXIT // SAI DO LOOP
ELSEIF EMPTY(cCPF) // SE DEIXOU EM BRANCO
ALERT("PRECISA DIGITAR O CPF")
LOOP // VOLTA PRA LINHA SEGUINTE AO 'DO WHILE'
ENDIF
nCPF := VAL( cCPF ) // CONVERTE cCPF CARACTER PARA nCPF NUM�RICO COM VAL()
IF !AG->(DBSEEK(nCPF)) // SE A PESQUISA DBSEEK() É NÃO VERDADEIRA, OU SEJA, FALSA, NÃO ENCONTROU NADA.
ALERT("ESSA PESSOA NÃO ESTÁ CADASTRADA")
LOOP
ELSE
// REGISTRO FOI ENCONTRADO, MOSTRA DADOS NA TELA E PEDE CONFIRMAÇÃO PARA APAGAR
cSN := " " // DEFINE A VARIÁVEL cSN COMO STRING VAZIA DE 1 CARACTER
@ 10,10 SAY "NOME: " + AG->NOME
@ 11,10 SAY "FONE: " + TRANSFORM(AG->FONE, "@R (99) 99999-9999") // ESSA FUNÇÃO TRABALHA IGUAL AO PICTURE DO @...GET
@ 24,00 SAY SPACE(79) COLOR "W+/BG" // LIMPA A LINHA DE STATUS
@ 24,00 SAY "Confirma deletar o registro? (S/N):" COLOR "W+/BG" GET cSN COLOR "GR+/N" PICTURE "@!" VALID cSN $ "SN"
READ
// MAIORES DETALHES SOBRE O @...GET ACIMA
// PICTURE "@!": Significa que tudo o que for digitado será MAIÚSCULO
// VALID cSN $ "SN": Valida o campo GET se cSN está contido na string "SN", só sai se o usuário pressionar "S" ou "N".
IF cSN = "S" // SE DIGITOU "S"
AG->(RLOCK()) // BLOQUEIA O REGISTRO
AG->(DBDELETE()) // MARCA O REGISTRO PARA DELEÇÃO
AG->(DBUNLOCK()) // DESBLOQUEIA O REGISTRO
ENDIF
ENDIF
ENDDO // VOLTA PRA LINHA SEGUINTE DO 'DO WHILE'
AG->(DBCLOSEAREA()) // FECHA O BANCO DE DADOS
RETURN
Resultado:
O nome, telefone e CPF acima são fictícios.
