Cadastrando dados no Clipper, Harbour, xHarbour.

Foto de Anderson

Vamos dar continuidade ao sistema apresentando a rotina de cadastro da nossa agenda.

Começamos abrindo o banco de dados em modo compartilhado com o parâmetro SHARED para usar em modo rede multi-usuário.

Depois criamos um loop de cadastro. Nele pegamos as informações do usuário com o comando @...SAY...GET; inserimos um registro em branco no arquivo com o DBAPPEND() e gravamos as variáveis do programa que o usuário digitou nos campos do banco de dados e liberamos o registro para uso normal na rede com o DBUNLOCK(). Fechamos o banco de dados para encerrar e voltar ao menu.

FUNCTION CADASTRO()
USE AGENDA ALIAS AG SHARED NEW // ABRE O BANCO DE DADOS EM MODO COMPARTILHADO
SET INDEX TO AGENDA            // ABRE O ARQUIVO DE ÍNDICE  
SET ORDER TO TAG CPF           // COLOCA ORDENADO POR CPF

SETCOLOR("W+/N")
@ 04,01 SAY PADC("CADASTRO 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
   cNOME := SPACE(30) // DEFINE UMA VARIÁVEL CARACTER TAMANHO 30
   nFONE := 0         // DEFINE TELEFONE NUMÉRICO
   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",54, " ") COLOR "W+/BG"      // MENSAGEM NA LINHA DE STATUS
   READ // AGUARDA A LEITURA DOS GETs

   IF LASTKEY() = K_ESC // LASTKEY() RETORNA A ÚLTIMA TECLA, SE FOI [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() NO DBF RETORNOU .T. (VERDADEIRA)
      ALERT("ESSA PESSOA JÁ FOI CADASTRADA")
      LOOP
   ELSE
      // ROTINA DE CADASTRO
      // PEDE PRO USUÁRIO DIGITAR O NOME E TELEFONE
      @ 24,00 SAY PADL("Digite um nome e telefone", 54, " ") COLOR "W+/BG" // NA COLUNA 55 TEM 'TECLE [ESC]'

      // PEGA DADOS DIGITADOS PELO USUÁRIO COM GET/READ  
      @ 10,10 SAY "NOME:" GET cNOME 
      @ 11,10 SAY "FONE:" GET nFONE PICTURE "@R (99) 99999-9999"
      READ	   
  
      IF ( ALERT("Confirma cadastro?", {"Sim", "Não"}) ) = 1  // ALERT() RETORNA A POSIÇÃO DO ARRAY ESCOLHIDO, "Sim"=1, "Não"=2, Esc=0.
         AG->(DBAPPEND()) // INSERE UM REGISTRO EM BRANCO NO ARQUIVO DBF  
	 AG->CPF  := nCPF    // ATRIBUI O CAMPO DO DBF À VARIÁVEL DO PROGRAMA
         AG->NOME := cNOME
         AG->FONE := nFONE
         AG->(DBCOMMIT()) // JOGA O CACHE PRO DISCO (GRAVA NO DBF)
         AG->(DBUNLOCK()) // DESBLOQUEIA O REGISTRO
      ENDIF
   ENDIF   
ENDDO // VOLTA PRA LINHA SEGUINTE DO 'DO WHILE'

AG->(DBCLOSEAREA()) // FECHA O BANCO DE DADOS
RETURN // RETORNA PRA FUNCÃO QUE CHAMOU CADASTRO()

Aprofunde-se mais sobre cadastrar dados.

Total votes: 0